Minicurso Java && Cl

Preview:

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