Prévia do material em texto
Programação Orientada a
Objetos
Parte 1
2
Gap Semântico
Gap• semântico: é a distância entre as entidades do mundo
real e o modelo computacional que o representa.
A diminuição do • gap semântico permite o melhor
entendimento do software.
Mundo real SoftwareGap semântico
3
Paradigma Estruturado
• É baseado em “o que o sistema faz”.
• Desvantagens:
• introduz dificuldade na evolução do sistema, pois
não favorece reuso.
• Um software do paradigma estruturado tem uma
grande distância semântica do modelo do mundo
real, o que dificulta o seu entendimento.
4
Paradigma Estruturado
Problema:•
Necessidade de métodos e técnicas que
promovam fatores como extensibilidade e
reusabilidade.
Solução:•
Orientação por Objetos
5
Orientação a Objetos
A ideia básica da OO é: o software deve ser constituído •
por objetos que representem os objetos que
constituem o mundo real.
O domínio do problema a ser resolvido caracteriza• -se
por classes de objetos que possuem atributos e
comportamentos e que se relacionam entre si.
O modelo utilizado no software orientado por objetos •
está mais próximo do mundo real do que aquele
utilizado no paradigma estruturado
→ redução do gap semântico.
6
Orientação a Objetos
Questões chave na construção de software orientado por objetos:•
Identificar objetos1.
• O software deve refletir os objetos do mundo real, ou seja,
os objetos estão no mundo real, basta identificá-los.
Descrever os objetos2.
A descrição dos objetos deve representar suas características •
e comportamentos. O elemento que descreve os objetos são
as classes.
Descrever as relações entre as classes de objetos3.
O tipo de relacionamento existente entre dois objetos (por •
exemplo: é um, possui, compõe, etc.) deve ser representado
diretamente no software.
7
Orientação a Objetos
• Os objetos encontrados são categorizados em classes.
• As classes constituem o núcleo de um programa
orientado por objetos.
• Conclusão:
– Um software OO é constituído por classes que descrevem o
comportamento e as características de objetos, que interagem
entre si.
– O programa principal tem basicamente a função de criar os
objetos principais e iniciar a computação.
Java
Linguagem de programação •
criada por uma equipe de
programadores chefiada por
James Gosling, da Sun, em
1995
Java – Características Principais
• Orientada a objetos
• Independência de plataforma: seus programas não são compilados
para um plataforma de hardware específica.
• Sem ponteiros: não permite a manipulação direta de endereços de
memória nem exige que os objetos criados sejam explicitamente
destruídos.
• Segurança: Java inclui mecanismos de segurança que podem evitar,
por exemplo, qualquer operação no sistema de arquivos da
máquina-alvo, minimizando riscos.
• Multithreaded: Java oferece suporte para criação e uso de threads.
Comentários
• São observações e explicações feitas pelo
programador no corpo da classe.
São desconsiderados pelo compilador.•
• Há dois tipos:
Comentário de uma linha, indicado por um //–
Exemplo: • //este método calcula o saldo
Comentário de várias linhas, que começa com um /* –
e termina com um */
Exemplo: • /*esta classe contém os dados de conta corrente do
cliente, possuindo métodos para sacar e depositar valores e para
calcular o saldo */
Tipos de Dados
• Tipos inteiros: são números sem partes fracionárias.
– Valores negativos são permitidos.
Tipos de Dados
Tipos de ponto flutuante: denotam números •
com partes fracionárias
Tipos de Dados
• Tipo char: utilizado para descrever caracteres
individuais.
• Exemplo
‘A’
‘c’
‘7’
Tipos de Dados
Tipo • boolean: tipo capaz de assumir valores
falso ou verdadeiro
false– e true
Variáveis
• Cada variável tem um tipo.
• Uma variável é declarada inserindo primeiro o
tipo e depois o nome da variável.
double salario;
int diasFerias;
long populacaoTerra;
boolean feito;
Identificadores de Variáveis
Um identificador deve iniciar com uma letra e •
ser uma sequência de letras e dígitos.
Não são permitidos:–
espaços em branco•
caracteres especiais (exemplos: @, #, $,ç)•
letras acentuadas•
O • java faz distinção entre letras maiúsculas e
minúsculas
nome e Nome são identificadores diferentes (mas –
ambos válidos).
Identificadores de Variáveis
• Não podemos usar palavras reservadas de uma
linguagem de programação.
Identificadores de Variáveis
Convenção de codificação da linguagem • java:
os nomes das variáveis devem ser iniciados com letras •
minúsculas
Caso o nome seja composto de mais de uma palavra, a •
palavra inicial deve ser minúscula e as demais iniciais
devem ser letras maiúsculas
Exemplos:
posAbsoluta
mediaAbsoluta
Inicializando Variáveis
• Nunca pode-se utilizar variáveis não inicializadas.
• Você pode declarar e inicializar uma variável na
mesma linha.
int idade = 15;
• Você atribuir a uma variável anteriormente
declarada, utilizando o nome da variável à
esquerda, um sinal de igual (=) e então alguma
expressão do Java que tem um valor apropriado à
direita.
int idade;
idade = 15;
Declarações primitivas com atribuições
Observe o ‘f’. É preciso inseri-lo em um tipo float,
porque o Java considera tudo que encontra com um
ponto flutuante como um tipo double, a menos que o
‘f’ seja usado.
Programa Java
• Tudo em um programa Java deve estar dentro de uma classe
• O Java diferencia maiúsculas de minúsculas.
Programa Java
Nome da classe:
• Deve iniciar com uma letra e, depois dela, pode ter qualquer combinação
de letras e dígitos.
• Não pode utilizar uma palavra reservada do Java
• Por convenção, nomes de classes são substantivos que iniciam com uma
letra maiúscula. Se um nome consistir em múltiplas palavras, utilize uma
letra inicial maiúscula em cada uma das palavras.
public class nomeClasse{
public static void main(String args[]){
...
}
}
public class nomeClasse{
public static void main(String args[ ]){
...
}
}
Programa Java
Método main:
• Precisa ser escrito exatamente como descrito acima.
• É necessário para que o programa escrito em uma
classe seja executado
• Mas não precisa existir em todas as classes de um
programa, como veremos ao longo do curso
• As classes podem possuir outros métodos, como
também veremos ao longo do curso
Saída
System.out.printf( ... );
• Essa chamada permite exibir mensagens de
texto, conteúdo de variáveis, etc.
• Exemplos:
System.out.printf(“Hello World %n”);
System.out.printf(“Valor %d”, 20);
System.out.printf(“VALOR %f”, num);
System.out.printf(“Dia: %d Mês %d”, d,m);
public class Saida{
public static void main(String args[]){
System.out.printf(“Hello World”);
int idade = 5;
System.out.printf(“Valor %d”, idade);
}
}
Saída
%d inteiro decimal
%f real
%c caractere
%s String
%n nova linha
%% o símbolo de %
%b boolean
Saída
System.out.println();
• Exibe mensagens de texto, conteúdo de variáveis,
expressões, ...
System.out.println(“Olá!”);
– Olá!
int num = 20;
System.out.println(“Soma total: ” + num);
– Soma total: 20
Saída
double temp = 20;
System.out.print(“Temperatura: ” + temp);
System.out.print(“ graus ”);
Temperatura: – 20 graus
Entrada
import java.util.Scanner;
public class Teste {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
System.out.printf("Informe a idade: ");
int idade;
idade = s.nextInt();
System.out.printf(“Idade informada: %d", idade);
s.close();
}
}
Entrada
Método Exemplo
nextByte()
nextDouble() double nota = s.nextDouble()
nextFloat()float preco = s.nextFloat();
nextLong()
nextShort()
nextInt() int idade = s.nextInt();
next() String primeiroNome = s.next();
nextLine() String nomeCompleto = s.nextLine();
nextBoolean() boolean teste = s.nextBoolean();
import java.util.Scanner;
public class Teste {
public static void main(String args[]) {
int idade;
double nota;
Scanner s = new Scanner(System.in);
System.out.printf("Informe a idade: ");
idade = s.nextInt();
System.out.printf("Informe a nota: ");
nota = s.nextDouble();
System.out.printf("Idade: %d, Nota %f", idade, nota);
s.close();
}
}
import javax.swing.JOptionPane;
public class TesteDados {
public static void main(String[] args) {
//Leitura
String nome = JOptionPane.showInputDialog("Nome");
int idade = Integer.parseInt(JOptionPane.showInputDialog("Idade"));
double peso = Double.parseDouble(JOptionPane.showInputDialog("Peso"));
char sexo = JOptionPane.showInputDialog("Sexo M/F").charAt(0);
boolean f = Boolean.parseBoolean(JOptionPane.showInputDialog(“formando?true/false"));
//Escrita
String msg = "Nome: " + nome + "\nIdade: " + idade + " anos" + "\nPeso: " + peso + " kg"
+"\nSexo: "+sexo+ "\nFormando: "+f;
JOptionPane.showMessageDialog(null, msg);
}
}
Operadores Aritméticos
Operador Significado Exemplo
+ Adição a + b
- Subtração a – b
* Multiplicação a * b
/ Divisão a / b
% Resto da divisão inteira a % b
- Sinal negativo (-unário) -a
+ Sinal positivo (+ unário) +b
++ Incremento unário ++a ou a++
-- Decremento unário --a ou a--
Operadores Aritméticos
num++; •
equivale a num = num + – 1;
num• --;
equivale a num = num – – 1;
Operadores Aritméticos
Pré• -incremento:
int x = 0;
int y;
y = ++x;
Pós• -incremento:
int x = 0;
int y;
y = x++;
• x passará a valer 1
• y receberá o valor 0
• Ocorre primeiro a operação de atribuição
e depois a operação de incremento
• x passará a valer 1
• y receberá o valor 1
• Ocorre primeiro a operação de incremento
e depois a operação de atribuição
Operadores Aritméticos
Classe • Math: contém vários métodos de funções
matemáticas, como por exemplo:
Math– .sqrt(x): retorna o valor da raiz quadrada do
número colocado entre parênteses.
Math– .pow(x,y): retorna o valor do primeiro parâmetro
elevado ao segundo parâmetro.
public class Teste {
public static void main(String args[]) {
int num = 4;
double raizQuad = Math.sqrt(num);
double potencia = Math.pow(num, 2);
System.out.printf("Raiz: %.2f", raizQuad);
System.out.printf("%nPotencia: %.2f", potencia);
}
}
Operadores relacionais
Permite comparar valores literais, variáveis ou •
o resultado de expressões
retorna um resultado lógico (falso ou verdadeiro)–
Operador Significado Exemplo
== Igual a == b
!= Diferente a != b
> Maior que a > b
>= Maior ou igual a a >= b
< Menor que a < b
<= Menor ou igual a a <= b
public class Relacional {
public static void main(String[] args) {
int a = 15, b = 12;
System.out.println("Igual: " + (a==b));
System.out.println("Diferente: " + (a!=b));
System.out.println("Maior: " + (a>b));
}
}
Saída:
Igual: false
Diferente: true
Maior: true
Operadores lógicos
• Conectam logicamente o resultado de
diferentes expressões aritméticas ou
relacionais.
– permite construir expressões compostas de várias
partes.
Operador Significado Exemplo
&& E lógico (and) a && b
|| Ou lógico (or) a || b
! Negação (not) !a
Operadores lógicos
Tabela Verdade•
a b a && b a || b !a
true true true true false
true false false true false
false true false true true
false false false false true
public class Logico {
public static void main(String[] args) {
double nota, freq;
boolean result;
nota = 80;
freq = 90;
result = (nota >= 70) && (freq >= 75);
System.out.println(result);
}
}
Operadores de atribuição composta
Utilizados quando a variável que recebe o •
resultado da atribuição figura como primeiro
termo da expressão que produz seu valor.
x = x + 15;
total = total * (valor/quant);
Operadores de atribuição composta
Operador Significado Exemplo
+= adição e atribuição a += expr
-= subtração e atribuição a -= expr
*= multiplicação e atribuição a *= expr
/= divisão e atribuição a/= expr
String
• Sequência de caracteres
• Uma string pode incluir letras, dígitos e vários
caracteres especiais, como =,-.*./
• Os literais de string são escritos como uma
sequência de caracteres entre aspas duplas.
• Exemplos:
String nome = “Ana Paula”;
String texto = “”; //uma string vazia
Estruturas condicionais em Java
if (condição)
comando1
Para incluir vários comandos no corpo de um • if,
inclua as instruções dentro de chaves.
if (condição){
comandos1
}
import java.util.Scanner;
public class Numero {
public static void main(String[] args) {
int num, resto;
Scanner s = new Scanner(System.in);
System.out.println("Informe um número inteiro: ");
num = s.nextInt();
resto = num % 2;
if(resto == 0){
System.out.println("O número é par.");
}
s.close();
}
}
Estruturas condicionais em Java
if (condição)
comando1
else
comando2
if (condição){
comandos1
}else{
comandos2
}
Para incluir vários comandos no corpo de um • if ou else, inclua as
instruções dentro de chaves.
Exemplo
• Faça um algoritmo que leia três valores
inteiros, determine e imprima o menor deles.
import java.util.Scanner;
public class Menor {
public static void main(String[] args) {
int num1, num2, num3;
Scanner s = new Scanner(System.in);
System.out.println("Informe três números: ");
num1 = s.nextInt();
num2 = s.nextInt();
num3 = s.nextInt();
if (num1 < num2 && num1 < num3) {
System.out.println("Menor número é " + num1);
} else if (num2 < num1 && num2 < num3) {
System.out.println("Menor número é " + num2);
} else if (num3 < num1 && num3 < num2) {
System.out.println("Menor número é " + num3);
}
s.close();
}
}
Exemplo
O que será impresso na tela?
public class ExemploElse {
public static void main(String[] args) {
int x, y;
x = 6;
y = 4;
if(x > 5)
if(y > 5)
System.out.println("X e Y são maiores que 5");
else
System.out.println("X é menor ou igual a 5");
}
}
Impressão:
X é menor ou igual a 5
Exemplo
O compilador Java sempre associa um • else à instrução if
imediatamente anterior.
A menos que instruído de outro modo pela colocação de chaves–
public class ExemploElse {
public static void main(String[] args) {
int x, y;
x = 6;
y = 4;
if(x > 5)
if(y > 5)
System.out.println("X e Y são maiores que 5");
else
System.out.println("X é menor ou igual a 5");
}
}
Exemplo
• O compilador Java sempre associa um else à instrução if
imediatamente anterior.
– A menos que instruído de outro modo pela colocação de chaves
public class ExemploElse {
public static void main(String[] args) {
x = 6;
y = 4;
if(x > 5){
if(y > 5)
System.out.println("X e Y são maiores que 5");
}else
System.out.println("X é menor ou igual a 5");
}
}
A instrução Switch
switch(opção){
case <valor1> :
comandos1
break;
case <valor2>:
comandos2
break;
...
case <valorN>:
comandosN
break;
default:
comandos
break;
}
A instrução Switch
• Opção pode ser do tipo char, byte, short, int
ou Strings.
• Pode ter uma ou mais cláusulas case.
• Se uma cláusula é selecionada, todos os
comandos são executados até o final do
switch ou até que um break seja encontrado.
• A cláusula default é executada, quando
nenhuma cláusula case é selecionada.
A cláusula default é opcional e deve ser colocada •
no final do corpo do switch.import java.util.Scanner;
public class ExemploSwitch {
public static void main(String[] args) {
int num1 = 2, num2 = 8, result = 0;
System.out.println("Informe uma opção: ");
Scanner s = new Scanner(System.in);
int op = s.nextInt();
switch (op) {
case 1:
result = num1 + num2;
break;
case 2:
result = num1 * num2;
break;
case 3:
result = num1 - num2;
break;
default:
System.out.println("Opção Inválida!");
break;
}
System.out.println("O resultado é: "+result);
s.close();
}
}
public class ExemploSwitch {
public static void main(String[] args) {
int mes;
String mesString = "Fevereiro";
switch (mesString) {
case "Janeiro": mes= 1;
break;
case "Fevereiro": mes = 2;
break;
case "Março": mes = 3;
break;
case "Abril": mes = 4;
break;
case "Maio": mes = 5;
break;
case "Junho": mes = 6;
break;
case "Julho": mes = 7;
break;
case "Agosto": mes = 8;
break;
case "Setembro": mes = 9;
break;
case "Outubro": mes = 10;
break;
case "Novembro": mes = 11;
break;
case "Dezembro": mes = 12 ;
break;
default: mes = 0;
break;
}
System.out.println(mesString + " "+mes);
}
}
Operador Ternário
• É um avaliador de condições que permite utilizar o valor de
duas expressões diferentes:
• Sintaxe:
<condição> ? <expressão_true> : <expressão_false>
• Quando a condição avaliada resulta em verdadeiro, o operador
retorna o resultado de expressão_true.
– Caso contrário, é retornado o resultado de expressão_false.
Operador Ternário
Exemplos:•
double x = 12.34, y = 56.78;
double max = x>y ? x : y;
int num = 100;
System.out.println(“Num=”+num+ (num>50 ? “é”: “não é”)+“maior que 50”);
Java - Estrutura de repetição FOR
Formato geral:•
for(nomeVariável = valorInicial; condição; incremento/decremento)
comando1;
OU
for(nomeVariável = valorInicial; condição; incremento/decremento){
comando1;
comando2;
...
comandoM
}
Imprimindo de 1 a 10 com for...
public class LoopFor{
public static void main(String[] args){
for(int i = 1; i <= 10; i++){
System.out.println(i);
}
}
}
Imprimindo de 10 a 1 com for...
public class LoopForReverso{
public static void main(String[] args){
for(int i = 10; i > 0; i--){
System.out.println(i);
}
}
}
Java – Estrutura WHILE
Estrutura geral:•
while(condição)
comando1;
OU
while(condição){
comando1;
comando2;
...
comando
}
Imprimindo de 1 a 10 com while...
public class LoopWhile{
public static void main(String[] args){
int i = 1;
while (i <= 10){
System.out.println(i);
i++;
}
}
}
Java – Estrutura DO-WHILE
Formato geral:•
do{
comandos;
}while(condição);
Imprimindo de 1 a 10 com do while...
public class LoopDoWhile{
public static void main(String[] args){
int i = 1;
do{
System.out.println(i);
i++;
} while (i <= 10);
}
}
Vetor - Declaração
<Tipo> identificador [];
identificador = new <Tipo> [tamanho];
ou
<Tipo> identificador [] = new <Tipo> [tamanho];
Exemplos:
Vetor - Declaração
Tanto faz colocar os colchetes antes ou depois do •
identificador.
Colocar os colchetes logo depois do tipo indica que •
todos os identificadores na declaração são vetores:
int[] a, b, c; //declaração de 3 vetores
Colocar os colchetes depois de um identificador indica •
que apenas aquele identificador é um vetor:
int a[], b, c; //declaração de um vetor e dois inteiros
Vetor - Atribuição
Para atribuir valores a um vetor você faz a •
atribuição na posição desejada:
Vetor - Atribuição
• Você também pode fazer a atribuição usando
uma lista de literais na declaração:
• Nesta situação o compilador determina o
tamanho baseado no número de elementos
fornecidos.
Exemplo
import java.util.Scanner;
public class Vetor {
public static void main(String[] args) {
int a[] = new int[10];
Scanner sc = new Scanner(System.in);
for(int i = 0; i < a.length; i++){
System.out.println("a[" +i+"]? ");
a[i] = sc.nextInt();
}
int soma = 0;
for(int i = 0; i < a.length; i++){
System.out.println("a[" +i+"]= " + a[i]);
soma = soma + a[i];
}
System.out.println("Soma = " + soma);
sc.close();
}
}
Vetores
Todo vetor em • java é automaticamente preenchido
com valores nulos, ou seja, todos os seus elementos
recebem valor 0 (zero) quando de qualquer tipo
numérico, false quando booleano e null quando de
tipo objeto.
public class Vetor {
public static void main(String[] args) {
int a[] = new int[10];
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
}
}
}
Matrizes (Arrays Muldimensionais)
Enquanto nos vetores os elementos são •
organizados em uma única dimensão, nas
matrizes, eles podem ser distribuídos em
várias dimensões distintas.
Matrizes
• Declaração e alocação:
– utiliza-se um par de colchetes para cada dimensão
<tipo> identificador [][]..[]= new <tipo> [dim_1]
[dim_2]...[dim_n];
• Exemplos:
double m[][] = new double[3][4];
char [][]mat = new char[5][5];
int t[][][] = new int[4][10][3];
Matrizes
Matrizes
Matrizes
Declaração e inicialização•
//Matriz 2x3
int m[][] = {{6,8,2}, {9,33,20}};
//Matriz 3x2
Int m[][] = {{1,2}, {3,4}, {5,6}};
– as matrizes são automaticamente preenchidas com valores nulos, ou seja, todos os seus elementos
recebem um valor 0 quando de qualquer tipo numérico, false quando booleano e null quando de tipo
objeto.
Matrizes
Atribuindo valores:•
x[1][4] = 5;
Matrizes
MAT[3][2] = ‘D’;
Matrizes
y[0][3][1] = 12;
//Atribui o valor 12 à posição identificada pelos índices 0 (linha 0), 3 (coluna 3) e 1
(profundidade 1)
Exemplo
import javax.swing.JOptionPane;
public class Matriz{
public static void main(String args[]){
double m[][] = new double[3][4];
double num;
for(int lin = 0; lin < 3; lin++){
for(int col = 0; col < 4; col++){
num = Double.parseDouble(JOptionPane.showInputDialog("Informe um valor"));
m[lin][col] = num;
}
}
for(int lin = 0; lin < m.length; lin++){
for(int col = 0; col < m[lin].length; col++){
System.out.println(m[lin][col]);
}
}
}
}
Referências
DEITEL• , P. DEITEL, H. Java: como programar. 8 Ed. São
Paulo: Prentice – Hall (Pearson), 2010.
JANDL Jr, Peter;• Java Guia do Programador - 3ª Edição;
Ed. Novatec; 2015.
HORSTMANN, • Cay; CORNELL, Gary Core. Java – Volume
I – Fundamentos. Makron Books.
Adaptado do material do Prof. Sergio • Bonato
Adaptado do material do • Prof Moisés Pereira.
ASCENCIO et al. Fundamentos da programação de •
computadores: algoritmos, Pascal e C/C++ e Java. 3.ed.
São Paulo: Pearson Prentice Hall, 2008