Upload
raphael-marques
View
1.768
Download
1
Embed Size (px)
DESCRIPTION
Minicurso sobre Java && C ministrado na I Semana da Computação do DI/UFPB.
Citation preview
Adriano Marinho Graduando em Computação na UFPB
Raphael Marques Mestrando em Informática na UFPB
São as linguagens mais utilizadas no mundo.
C no Desktop e Java na Web
Porque saber as duas?
Mais conhecimento sobre programação.
Nem tudo se resolve numa linguagem só.
Não seja limitado.
R2
Java:
Programação Orientada a Objetos
Compilada para Bytecodes
“Interpretada” em tempo de execução pela JVM
Write once! Run Anywere!
A JVM TEM O PODER!
R3
C:
Programação Estruturada
Compilada diretamente para código nativo
VOCÊ TEM O PODER!
A4
#include <stdio.h>
int main ()
{
printf(“Hello World!\n”);
return 0;
}
A5
public class Classe{
public static void main(String[] args){
System.out.println(“Hello World!”);
}
}
R6
Use o console (prompt de comando no Windows) para compilar!
Você deve ter o Java JDK instalado na sua máquina.
Exemplo:
javac NomeDaClasse.java
java NomeDaClasse
R7
Em Java, módulo é descrito por uma classe. Classes adicionais são carregadas
automaticamente. Importar outras classes: import pacote.Classe;
import pacote.*;
import static pacote.Classe.campo
import static pacote.Classe.*; Classpath: java –cp biblioteca.jar SuaClasse
R8
Use o console (prompt de comando no Windows) para compilar!
Você deve ter algum compilador C instalado na sua máquina.
Exemplo:
gcc nomeDoPrograma.c –o nomeDoPrograma
nomeDoPrograma
A9
Para isso escrevemos arquivos de cabeçalho (.h), além dos arquivos .c.
Nos arquivos .h devem ficar:
protótipos das funções, definições de estruturas e variáveis globais.
gcc main.c Arq1.c Arq2.c -o MeuProg
#include<modulo.h>
A10
C
char (8 bits) int (? bits c/ sinal) float (tamanho do int) double (?)
JAVA
boolean (false,true) byte (8 bits c/ sinal) short (16 bits c/ sinal) char (16 bits s/ sinal) int (32 bits c/ sinal) long (64 bits c/ sinal) float (32 bits) double (64 bits)
A11
Modificadores:
short
long
signed
unsigned
Exemplos:
short int
short
signet char
unsigned long int
A12
Em C, um ponteiro contêm um endereço de memória. Um ponteiro pode ser utilizado para qualquer
estrutura na memória.
Ponteiros permitem operações aritméticas.
Em Java, uma referência faz referência a um objeto na memória. Uma referência só é utilizada com objetos.
Referências NÃO permitem operações aritméticas.
R13
C
lixo
Ponteiros com lixo podem causar travamentos do SO
Java
null
false
0
0.0
R14
Usamos System.out.println() Exemplos:
System.out.println();
System.out.println(x);
System.out.println(“HelloWorld”);
System.out.print(“valor: ” + x);
System.out.println(“valor: ” + x + 1);
System.out.printf(...);
R15
Usamos System.in.read()
Lê um byte por vez
A classe Scanner
Scanner scan = new Scanner(System.in)
int x = scan.nextInt();
float f = scan.nextFloat();
String token = scan.next();
String linha = scan.nextLine();
R16
Usamos printf(), uma função da biblioteca stdio.h
Exemplos:printf(“%c\n”, 'a‟); →a
printf(“%c\n”, 65); →a
printf(“%d\n”, 1977); →1977
printf(“%ld\n”, 650000L); →650000
printf(“%x\n”, 2748); →0xABC
printf(“%o\n”, 83); →123
A17
Exemplos:printf(“%6d \n”, 1977); → 1977
printf(“%06d \n”, 1977); →001977
printf(“%4.2f \n”, 3.1416); →3.14
printf(“%+.0e \n“,3.1416); →????
printf(“%E\n”, 3.1416); →3.1416e1
printf(“%*d \n”, 5, 10); → 10
printf("%s\n”, “Adriano"); →Adriano
printf(“%d + %d = %d”,1,2,3); →1 + 2 = 3
A18
Usamos scanf(), uma função da biblioteca stdio.h
Exemplos:char str [80];
scanf ("%s",str);
int i;
scanf ("%d",&i);
scanf ("%x",&i);
scanf ("%d",i);
A19
Conversão implícita:
Tipos:
▪ Por atribuição;
▪ Alargamento de inteiros;
▪ Compatibilidade de operandos;
Todos os tipos de C são compatíveis entre si!!!
Conversão explícita: type cast.
(int)x
(float)y
A20
Conversão implícita: Onde não houver perda de precisão
Ex:▪ float f = 5;
▪ double d = f + 1.5;
▪ byte b = 1000;
▪ int x = 1.0;
Conversão explícita: type cast (int)x
(float)y
R21
Java e C:
Sizeof em C:
sizeof( int )
+ - * / > >= < <= |
& ! ^ -- ++ -= += << >>
= == != % ~ ^ ? : && ||
R22
Em C:
O modificador const
▪ const int PI = 3.1415;
Macros
▪ #define PI 3.1415
Em Java:
O modificador final
▪ final int PI = 3.1415;
R23
C:
A condição é um inteiro
▪ false: zero
▪ true: qualquer valor diferente de zero
Ex:
▪ if(x == 5){...}
▪ if(x = 5){...}
▪ if(x == 1){...} → if(x != 0){...} → if(x){...}
A24
Java:
A condição é sempre um boolean
▪ int x = 4;
▪ if( x == 4 ){...}
▪ if( x ){...} → apenas se x for boolean
A25
Java e C:
if
if-else
while
do-while
switch-case
break
continue
A26
int i;
for(i = 0; i < 10; i++){
...
}
A27
for(int i = 0; i < 10; i++){
...
}
int[] numeros = ...
foreach(int n : numeros){
...
}
R28
Escreva um programa na sua nova linguagem que leia um valor de raio e calcule a área e o perímetro.
Exiba a área e perímetros calculados.
O programa pergunta o raio até que o usuário digite um valor negativo.
R30
Sequência de posições de memória C não faz controle de limite do array Representado por um ponteiro. Estático:
▪ int p[10];▪ int[] p = int[10];▪ int p[x];
Dinâmico▪ int p* = (int*) malloc( sizeof( int ) * tamanho );▪ free(p);
Tamanho de um array: sizeof( array ) / sizeof( tipoDoArray)
▪ sizeof( p ) / sizeof( int )
O mais comum é guardar o tamanho do array numa variável.
A31
Arrays são objetos. São acessados pela sua referência. Ex:
int[] a; → referência nula
int[] a = new int[10]; → inicialização
int[] a = new int[x]; → inicialização
int[] a = new int[]{1,2,3,4,5}; → inicialização
int[] a = new {1,2,3,4,5}; → abreviação
a.length → n de elementos
a[2] → 3 elemento do array
int a[10];
a++;
R32
Métodos: Ex:
static void imprimeValor(int valor){
System.out.println(valor);
}
static float soma(float valor1, float valor2){
return valor1 + valo2;
}
R33
Sobrecarga de métodos:
Java diferencia 2 métodos com o mesmo nome pela quantidade e tipo de parâmetros.
Ex:
static float metodo(float v1, float v2){...}
static float metodo(float v1){...}
static float metodo(float v1, int v2){...}
static int metodo(float v1, float v2){...}
R34
Passagem de parâmetro sempre por cópia.
Objeto como parâmetro
▪ É feita uma copia da referência.
▪ Simula passagem de parâmetro por referência.
R35
Funções: C diferencia funções apenas pelo nome! Nada de sobrecarga de funções!!!
Ex:int SomarDoisNumeros (int a, int b){
return a + b;
}
void ImprimirOi(){
printf(“Oi!\n”);
}
A36
Passagem de parâmetro sempre por cópia. Ex:
int SomarDoisNumeros (int a, int b) Passagem de parâmetro por referência. É emulada utilizando-se ponteiros
Ex:
int SomarDoisNumeros (int *a, int *b){...}
...
int c = SomarDoisNumeros (&a, &b);
A37
Strings em C são arrays! (e podem ser alterados) char str[] = “String”;
char *str = “String”; termina com ‘\0’ “String” → „S‟ , „t‟ , „r‟ , „i‟ , „n‟ , „g‟ , „\0‟
Operações (definidas em string.h): strcpy strlen strcmp strstr strtkn
A38
Classe String Não precisa de „\0‟ no final!!! Strings não podem ser alteradas!!!
Para isso use StringBuffer.
R39
Operações:String nome = “Raphael”
nome.length() → 7
nome + “ Marques” → “Raphael Marques”
nome.charAt(1) → „a‟
nome.contains(“Raphael”) → true
nome.equals(“Raphael”) → false
nome.toLowerCase() → ”raphael marques”
String.valueOf(500) → “500”
R40
C: O programador aloca e libera memória.
Não existe gerenciamento automático de memória.
Java: O programador aloca memória
O Garbage Collector libera memória quando um objeto não é mais referenciado.
System.gc() é apenas uma SUGESTÃO.
A41
Escreva um programa na sua nova linguagem que leia N notas do usuário.
Calcule a média das notas e exiba o resultado.
Informe se o aluno foi aprovado, reprovado ou está na final.
No caso da final, informe quanto ele precisa tirar na prova final para passar.
A43
Erros típicos:
Redeclaração de variáveis/funções;
Avisos de variáveis sem inicialização;
Funções com número de parâmetros incorretos;
Etc;
A44
Exceções
Param a execução do programa sem travar o SO.
Exceções de vários tipos:
▪ NullPointerException
▪ ArrayIndexOutOfBoundsException
StackTrace:Exception in thread "main“ ArrayIndexOutOfBoundsException: 500
at Teste.metodo2(Teste.java:4)
at Teste.metodo1(Teste.java:8)
at Teste.main(Teste.java:13)
R45
JAVA NÃO É C!!!
Deixe o Garbage Collector trabalhar...
objetoInutil = null;
Declare as variáveis quando for utilizá-las.
R46
C NÃO É JAVA!!!
Todo cuidado com ponteiros é pouco!!!
Não esqueça do lixo!!!
Cuidado com o tamanho dos tipos primitivos.
Lembre de liberar memória.
A47
C: Notas de aula do Prof. Ulysses Oliveira
▪ http://www.ulysseso.com/
Biblioteca padrão de C▪ http://www.utas.edu.au/infosys/info/documentation/C/CStdL
ib.html
Java: Procure no Google: java api 1.6
▪ http://java.sun.com/javase/6/docs/api/
Procure no Google: tutorial sun▪ http://java.sun.com/docs/books/tutorial/
A48
C:
math.h
string.h
time.h
Java:
System
File
Math
Arrays
A49
C:
Tenha paciência e cuidado!
Java:
Toda classe começa com letra maiúscula:
▪ Pessoa, Carro, String, System, etc...
O nome do arquivo deve ser IGUAL ao nome da classe:
▪ class Pessoa → Pessoa.java
R50
C:
Dev C++
CBuilder
NetBeans
Eclipse
Java:
JBuilder
NetBeans
Eclipse
R51
Adriano Marinho Graduando em Computação na UFPB
Raphael Marques Mestrando em Informática na UFPB