Você está na página 1de 35

Do C ao Java

Uma breve apresentação da linguagem Java

Prof. Mateus M. Luna1 Prof. Reinaldo de Souza


1. mateus_m_luna@ufg.br
2. reinaldojunior@inf.ufg.br

Material elaborado em parceria com os professores Nádia F. F. da Silva,


Juliana P. Félix, Guilherme S. Marques e Dirson S.

2023/2
Sumário
1. O que é Java?
2. Criando um código em Java
○ Compilando via terminal
○ Usando uma IDE
3. Variáveis e tipos primitivos
4. Tipos não-primitivos
○ Strings
○ Vetores
5. Leitura e saída de dados
6. Operadores, instruções de controle
7. Funções Métodos
8. Praticando

2
O que é Java?

3
O que é Java?
Java é uma Plataforma

Um ambiente computacional para execução de programas através de uma máquina


virtual chamada Java Virtual Machine (JVM).

● Criada pela Sun Microsystems nos anos 90. Comprada pela Oracle em 2008.
● Tecnologia geralmente oferecida em três grandes segmentos:
○ Java SE (Standard Edition). Contém as bibliotecas base da plataforma, usada pela
maioria dos projetos;
○ Java EE (Enterprise Edition). Versão voltada para grandes projetos de empresas
com recursos avançados;
○ Java ME (Micro Edition). Versão para aplicativos móveis de baixa disponibilidade
de hardware e sistemas embarcados;
● Mas existem várias extensões, como por exemplo a JSP (Java Server Pages),
voltada para criação de páginas web.
4
O que é Java?
Java é uma Linguagem de Programação Código Java (.java)

● Projetada baseando-se nos


paradigmas Estruturado e Orientado Compilador
Javac
a Objetos;
● Inspirada fortemente por C (1972),
ByteCode (.class)
C++ (1979), Pascal (1970), Smalltalk
(1969)...
● Sua grande vantagem é a
portabilidade, já que ao rodar seus JVM JVM JVM

programas pela JVM, o programa


funciona em diversos sistemas.
Windows Linux Mac

5
O que é Java?
Java é uma Linguagem de Programação Código Java (.java)

● Para se executar um programa Java,


é preciso ter o JRE (Java Runtime Compilador
Javac
Environment) instalado, que possui a
JVM.
ByteCode (.class)
● Para se desenvolver programas em
Java, é preciso ter o JDK (Java
Development Kit) instalado, que
possui o compilador Javac. JVM JVM JVM

Windows Linux Mac

6
Criando um código em
Java

7
Como era com código em C…
Código fonte: olamundo.c

#include <stdio.h> // Pacotes com funções de entrada e saída

int main() {
printf("Olá, Mundo!\n" );
return 0;
}

Compilando e executando:

gcc olamundo.c -o olamundo

./olamundo

Olá, Mundo!

8
Como é com código em Java…
Código fonte: OlaMundo.java

public class OlaMundo {// Classe OlaMundo, contendo método main

public static void main(String[] args) {


System.out. println("Olá, Mundo!" );
}
}

Compilando e executando:

javac OlaMundo.java

java OlaMundo

Olá, Mundo!

9
Usando IDEs
Ambientes de Desenvolvimento Integrado (IDEs) te ajudam a organizar seu projeto de
código, gerir dependências e tirar proveito de recursos da linguagem para facilitar a
programação de projetos mais complexos.

Eclipse Netbeans IntelliJ IDEA BlueJ

10
Criando um novo projeto no Eclipse
Vamos botar a mão na massa…

11
Olhando para a função main…
Pra quê isso tudo?

12
Olhando para a função main…
Pra quê isso tudo?

public - Este método é público, visível e invocável por objetos de outros tipos

static - Este método é estático, imutável, pode ser acessado sem ter sido
instanciado um objeto desta classe (chamamos de método da classe, ao invés do
objeto)

void - Este método não retorna valor algum

main - O identificador do método, neste caso um nome especial que indica para a
JVM que a execução deve começar por aqui.

A combinação de public e static é o que permite que a JVM chame este


método antes mesmo de quaisquer objetos serem feitos.

13
Variáveis e tipos
primitivos

14
Tipos de dados em C vs. Java
Tabela 1: Tipos de dados primitivos em C (desconsiderando unsigned e signed)

Tipo de Dados Valor Padrão Tamanho Intervalos

char ‘\u0000’ 1 byte -128 até 127

short 0 1 byte -32.768 até 32.767

int 0 2 ou 4 bytes? -32.768 até 32.767

long 0l 4 bytes -2.147.483.648 até 2.147.483.647

float 0.0 4 bytes 6 a 7 dígitos decimais significantes

double 0.0d 8 bytes 15 dígitos decimais significantes

15
Tipos de dados em C vs. Java
Tabela 2: Tipos de dados primitivos em Java

Tipo de Dados Valor Padrão Tamanho Intervalos

boolean false 1 bit false, true

char ‘\u0000’ 2 bytes 0 até 65535

byte 0 1 bytes -128 até 127

short 0 2 bytes -32.768 até 32.767

int 0 4 bytes -2.147,483.648 até 2.147.483.647

long 0l 8 bytes -9.223.372.036.854.775.808 até


9.223.372.036.854.775.807

float 0.0f 4 bytes 6 a 7 dígitos decimais significantes

double 0.0 8 bytes 15 dígitos decimais significantes


16
Tipos não-primitivos

17
Tipos não-primitivos
Antes de falarmos sobre "Tipos não-primitivos", vamos refletir sobre o processo de
criação e uso de variáveis em nosso código:
Isto é a declaração de uma variável. Com
ela, dizemos para o compilador "reservar"
um espaço na memória do tamanho de
int x; int e rotulá-lo como x.

Isto é a atribuição de valor para a variável.


x = 4; Antes disso, a variável possui o valor que
é "padrão" do seu tipo, neste caso, 0.
int y = 6;
Ambas podem ser feitas em uma linha, criando
e inicializando a variável de uma vez.
y = x;
Atribuições podem ser feitas a qualquer momento. Nos tipos
primitivos, apenas o valor é passado (note que y aqui não passar a
"ser x" mas sim a "ter" o mesmo valor que x tem no mento: 4).

18
Tipos não-primitivos
Estruturas de dados mais complexas, com uma string (cadeia de caracteres), são
representadas em Java por Objetos, cujo tipo é uma Classe. Estes objetos precisam ser
instanciados (criados) com o comando new logo antes de chamarmos o seu método
construtor, que sempre possui o mesmo nome da Classe deste Objeto.

Classe que deve estar declarada no código, ou importada via import.

Variável, uma instância da classe, um objeto do tipo NomeDaClasse

NomeDaClasse nomeDaVariavel = new NomeDaClasse(TipoParams nomeParams);

Operador Java para alocar memória


e retornar uma referência para ela.
Método construtor do objeto, que pode ou não ter parâmetros;

Nota: antes de ser instanciado, todo objeto tem como valor padrão null;
19
“Tipo String”
Código fonte: OlaMundo.java

public class OlaMundo {


public static void main(String[] args) {
boolean contemOla = false;
int tamFrase = 0;
String frase = new String("Olá, mundo!" );

contemOla = frase. contains("Olá");


tamFrase = frase. length();
// Exibe frase...
}
}

A classe String define objetos String com métodos utilitários para análise do texto, como
acessar seus caracteres, ver seu tamanho e comparar conteúdo. Ela também faz parte do
pacote java.lang, que já é automaticamente importado em todos os códigos Java.
20
E os vetores?
Código fonte: OlaMundo.java

public class OlaMundo {


public static void main(String[] args) {
int[] vet = new int[4]; // Vetor de inteiros, 4 casas
double[] notas; // Vetor de double, vazio
notas = new double[5]; // Vetor de double, 5 casas
String[] nomes = new String[7]; // Vetor de Strings...

int numNomes = nomes .length; // 7 casas


// Acessa valores como nomes[0]...
}
}

Neste caso, o operador new faz o serviço de alocar espaços contíguos na memória que
caibam aquele tipo. Note que qualquer uma dessas variáveis agora é um Objeto especial, que
tem atributos e métodos úteis para manipulação de vetores como .length, .equals(),
.toString()...
21
Leitura e saída de dados

22
Exibindo dados em Java
Código fonte: OlaMundo.java

public class OlaMundo {


public static void main(String[] args) {
int x = 5;
boolean flag = true;
char c = 'a';

System.out. println("Após esta frase haverá nova linha." );


System.out. printf("x = %d, c = %c\n" , x, c);
System.out. printf("flag = %b" , flag);
}
}

A classe System possui diversos utilitários para se interagir com o sistema. Ela também
faz parte do pacote java.lang, que já é automaticamente importado em todos os códigos
Java. System.out é o Objeto de saída padrão e possui diversos métodos para tal.
23
Recebendo dados em Java
Código fonte: OlaMundo.java

import java.util. Scanner;

public class OlaMundo {


public static void main(String[] args) {
int x = 5;
// Instanciando um objeto Scanner para a entrada padrão.
Scanner leitor = new Scanner(System.in);
x = leitor. nextInt();
System.out .print(x);
leitor.close(); // Importante! Fecha o fluxo de leitura
}
}

Objetos Scanner servem para leitura de dados de diferentes fontes. Como queremos ler do
Objeto de entrada padrão, passamos System.in como parâmetro para sua função construtora.
Uma vez instanciado, podemos usar seus métodos para leitura como .nextInt() .
24
Operadores, instruções
de controle

25
Operadores
De modo geral, os operadores como ==, !=, <=, >, &&,||, etc. funcionam da
mesma maneira que em C com a vantagem de retornarem o tipo boolean (quando
for o caso). Porém é preciso lembrar que o comportamento que esperamos delas é
para tipos primitivos. Portanto:

public class OlaMundo {


public static void main(String[] args) {
int x = 5, y = 2;
String nome = new String("Alice");
boolean ehDiferente = x != y; // Funciona!
boolean ehIgual = nome == "Alice"; // Não funciona assim!
boolean ehIgualMesmo = nome.contentEquals( "Alice"); // OK!
}
}

26
Operadores
Para Strings, também podemos usar os operadores + e += como forma de
concatenar frases:

public class OlaMundo {


public static void main(String[] args) {
String nome = new String("Alice");
int idade = 39;

nome += " Braga";

System.out .println(nome + " é uma atriz." );


System.out .println(nome + " tem " + idade + " anos.");
}
}

27
Instruções de controle
Instruções de controle como if, else, else if, while, for, continue, break,
também funcionam de maneira análoga ao C. Mas há uma novidade: o comando
for na forma de "for each":

public class OlaMundo {


public static void main(String[] args) {
// Inicializando um vetor com valores (sem usar o new)
String[] osHobbits = { "Frodo", "Sam", "Pippin", "Merry" };

// Usando operador for no modo "foreach"


for (String umHobbit: osHobbits) {
System.out .println(umHobbit);
}
}
}
28
Funções Métodos

29
Funções acessadas pelo método main
No paradigma de Orientação a Objetos, trabalhamos mais comumente com
métodos de classes do que funções por si. O método pertence à classe, como é o
caso da função main. Porém, dada a natureza estática (static) da função main,
só podemos chamar métodos igualmente static dentro dela, ou métodos
definidos por objetos já disponíveis em seu contexto.

public class OlaMundo {


public static void main(String[] args) {
int soma = someInteiros (5, 9);
System.out .println(soma);
}
public static int someInteiros (int a, int b) {
return a + b;
}
}
30
Passagem de parâmetros
Assim como em C, toda passagem de parâmetro em Java é por cópia. No entanto,
pode-se alcançar o efeito de uma passagem por referência ao se passar um
Objeto como argumento (veremos isso em aulas futuras).

public class OlaMundo {


public static void main(String[] args) {
int x = 1;
naoIncrementa(x); // x continua 1 ao final
x = retornaIncrementado(x); // x passa a ser 2 ao final
}
public static void naoIncrementa(int a) {
a = a + 1;
}
public static int retornaIncrementado(int a) {
return a + 1;
}
}

31
Praticando

32
Exercício da Prova 3 de Introdução à
Programação de Engenharia Mecânica
Uma determinada turma do curso de Engenharia Mecânica possui 5 alunos. O professor de Introdução
à Programação aplicou 3 avaliações (AV1, AV2 e AV3) durante o semestre. A AV1 teve peso 2, enquanto
a AV2 e a AV3 tiveram peso 3:

Média do Aluno = ((AV1*2)+(AV2*3)+(AV3*3))/6

Crie um programa em C que, na função principal (main), solicite as 3 notas de provas de cada aluno
(utilizando para isso um laço de repetição).

O cálculo da média do aluno deve ser realizado, a cada iteração, através de uma função específica
obterMediaAluno(). A média de cada aluno deve: i) ser retornada pela função, ii) mostrada na
função principal e iii) guardada em um vetor; à medida em que for calculada.

Ao final, o programa deve calcular e mostrar a média da turma através de uma segunda função
obterMediaTurma(), que: i) recebe como parâmetro o vetor das médias dos alunos da turma e ii)
retorna a média, que deve ser mostrada na função principal.
33
Obrigado!

Dúvidas ou sugestões:
mateus_m_luna@ufg.br

34
Do C ao Java
Uma breve apresentação da linguagem Java

Prof. Mateus M. Luna1 Prof. Reinaldo de Souza


1. mateus_m_luna@ufg.br
2. reinaldojunior@inf.ufg.br

Material elaborado em parceria com os professores Nádia F. F. da Silva,


Juliana P. Félix, Guilherme S. Marques e Dirson S.

2023/2

Você também pode gostar