Você está na página 1de 61

Preparatório EsAEx

TÉCNICAS DE PROGRAMAÇÃO
Programação Orientada a Objetos
Prof. Ricardo Sant'Ana
Sumário

1 Introdução

2 Conceitos

3 Conclusão
Introdução
Lista de Assuntos
 2. TÉCNICAS DE PROGRAMAÇÃO:
• a. Lógica aplicada: algoritmos, técnicas de construção de
algoritmos, resolução de problemas;
• b. Estrutura de dados: vetores, matrizes, cadeia de caracteres,
listas lineares, pilhas, filas, árvores, grafos, pesquisa de dados,
classificação de dados, estruturas e tipos abstratos de dados,
recursividade, eficiência e complexidade;
• c. Programação estruturada: refinamentos sucessivos, estruturas
em blocos, estruturas de controle de fluxo, programação modular,
rotinas, subrotinas, procedimentos e funções (Linguagem C);
• d. Programação orientada a objetos: classes e objetos,
polimorfismo, herança, interface, linguagens orientadas a objetos
(Linguagens C++ e Java);
• e. Linguagens de programação para a Internet: PHP e JSP.
Introdução
Bibliografia
 COSTA, Daniel G. JAVA em Rede: Recursos Avançados. Rio de Janeiro:
Brasport, 2008.
 DEITEL, H. M. JAVA Como Programar. 6. ed. [S.l.]: Editora Bookman, 2006.
 GAMMA, Erich et al. Padrões de Projeto: Soluções Reutilizáveis de Software
Orientado a Objetos. [S.l.]: Bookman, 2005.
 GUIMARÃES, Ângelo de Moura; LAGES, Newton de Castilho. Algoritmos
Estruturados de Dados. [S.l.]: Editora LTC, 1994.
 MORGAN, Michael. JAVA 2 para Programadores Profissionais. [S.l.]: Editora
Ciência Moderna, 2001.
 MUTO, Claudio Adonai. PHP & MYSQL Guia Completo. [S.l.]: Brasport, 2004.
 TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J.
Estruturas de Dados Usando C. [S.l.]: Makron Books, 1995.
 VELOSO, Paulo et al. Estrutura de Dados. [S.l.]: Editora Campus, 1983.
 WIRTH, Niklaus. Algorítmos e Estruturados de Dados. [S.l.]: Editora PHB, 1989.
Introdução
Foco (baseado em questões)
 Programação Orientada a Objetos em Java
 Ponteiros em C
 Árvores e Pilhas (Estrutura da Dados)

Teoria e Exercícios
 Conhecimento prévio!
Conceitos
Mas o que é Java ?
Conceitos
Plataforma Java
 A classe MyProgram.java é compilada
utilizando o javac e, o resultado, é executado
numa máquina virtual java (JVM).

Conceitos
Funcionamento Geral
 Texto comum com extensão .java
• javac MyProgram.java → MyProgram.class
 Bytecodes
 Java Virtual Machine (JVM)
• java MyProgram
Conceitos
Funcionamento Geral
 Multiplataforma
Conceitos
Principais Estruturas
 Tipos da Dados Primitivos:
• boolean, char, byte, int, long, float, double;
 Operadores:
• Aritméticos, Relacionais e Lógicos;
 Estruturas Condicionais:
• If, switch-case, ternário
 Estruturas de repetição
• For, while, do-while
Conceitos
Observações
 Ternário
public class Exemplo {
public static void main(String[] args) {
float nota=7.5F;
char situacao=nota>7?'A':'R';
System.out.println("Situacao: "+situacao);
}
}
 Resultado:
Situacao: A
Conceitos
Break no switch-case
public class Exemplo {
public static void main(String[] args) {
int resposta=2;
switch(resposta){
case 1: System.out.println("Informatica");break;
case 2: System.out.println("Enfermagem");break;
case 3: System.out.println("Psicologia");break;
case 4: System.out.println("Pedagogia");break;
default: System.out.println("Nao encontrado");
}
}
}
Enfermagem
Conceitos
 Break no switch-case
public class Exemplo {
public static void main(String[] args) {
int resposta=2;
switch(resposta){
case 1: System.out.println("Informatica");
case 2: System.out.println("Enfermagem");
case 3: System.out.println("Psicologia");
case 4: System.out.println("Pedagogia");
default: System.out.println("Nao encontrado");
}
}
}
Enfermagem
Psicologia
Pedagogia
Nao encontrado
Conceitos
 Break no switch-case
public class Exemplo {
public static void main(String[] args) {
int resposta=2;
switch(resposta){
case 1: System.out.println("Informatica");
case 4: System.out.println("Pedagogia");
case 2: System.out.println("Enfermagem");
case 3: System.out.println("Psicologia");
default: System.out.println("Nao encontrado");
}
}
}
Enfermagem
Psicologia
Nao encontrado
Conceitos
Utilização do continue
public class Exemplo {
public static void main(String[] args) {
for (int i=0; i<10; i++){
System.out.print(i+" - ");
}
}
}

Resultado
0-1-2-3-4-5-6-7-8-9-
Conceitos
Utilização do continue
public class Exemplo {
public static void main(String[] args) {
for (int i=0; i<10; i++){
if(i==7) continue;
System.out.print(i+" - ");
}
}
}

Resultado
0-1-2-3-4-5-6-8-9-
 O sete não aparece !!
Conceitos
Utilização do continue
public class Exemplo {
public static void main(String[] args) {
for (int i=0; i<10; i++){
if(i==7) break;
System.out.print(i+" - ");
}
}
}

Resultado
0-1-2-3-4-5-6-
 A partir do sete não aparece mais nada !!
Conceitos
POO – parte 1
 Classes e Objetos
 Atributos e Métodos
 Construtor e Destrutor
Conceitos
Classes e Objetos
 Dada uma entidade qualquer que desejamos modelar, a classe
é o projeto dessa entidade. Um objeto dessa classe representa
a entidade em si.
 Exemplo1:
class Solicitacao {
String nome;
long cpf;
int protocolo;
}
 Exemplo de um trecho de código que cria um objeto da classe
Solicitacao:
Solicitacao W = new Solicitacao();
Conceitos
Atributos e Métodos
 Atributos:
• modelam o estado que a classe pode ter. São os atributos
que diferenciam um objeto de outro da mesma classe.

 Métodos:
• modelam as ações que os objetos poderão executar. Todos
os objetos da mesma classe possuem os mesmos métodos.

 Atributos e Métodos são os MEMBROS da classe.


Conceitos
Exemplo
class Carro {
String modelo;
String marca;
char cor;
int ano;
String proprietario;
boolean autorizado;

void imprime() {
System.out.println("Dados do veículo");
System.out.println("Marca: " + marca + "\tModelo:" + modelo);
System.out.println("Dono: " + proprietario + "\tAno: " + ano);
}
}
Conceitos
Construtor
 O construtor é um método da classe que é
chamado sempre que instanciamos um objeto
desta;
 O construtor não tem retorno (nem void) ;
 O construtor sempre tem o mesmo nome da
classe;
 Se não for definido pelo programador, é
adicionado automaticamente pelo compilador
Java.
 O operador new exige , como parâmetro, um
construtor.
Conceitos
Exemplo
class Ponto2D {
double x;
double y;
String label;
Ponto2D(){
x=0;y=0;label="nenhum";
}
void imprime(){
System.out.println("x= "+x+"\t y="+y+"\t"+label);
}
}

Conceitos
Exemplo (continuação)
public class ExPonto01 {
public static void main(String[] args) {
Ponto2D Q = new Ponto2D();
Q.x=10;
Q.y=10;
Q.label="marco01";
Q.imprime();
Ponto2D P = new Ponto2D();
P.imprime();
}
}
Conceitos
Destrutor
 Em outras linguagens de programação, o destrutor é
um método utilizado para liberar o espaço de
memória do objeto;
 O Java não possui destrutor.
 O Java possui o Garbage Collector:
 Todos os objetos que perdem todas as suas
referências num programa são CANDIDATOS a
serem descartados pelo Garbage Collector
 O método finalize() do Java torna o objeto candidato
a ser descartado pelo Garbage Collector.
Conceitos
POO – parte 2
 Visibilidade
 Métodos Acessores e Modificadores
• Encapsulamento
 Sobrecarga de Métodos
Conceitos
Visibilidade
 A visibilidade permite que o programador defina
quais atributos e métodos poderão ser acessados
por outras classes.
 Tipos de Visibilidade
• private: somente a classe atual pode acessar
• public: todas as outras classes podem acessar
• protected: somente classes do mesmo pacote ou
classes filhas terão acesso.
• default: somente as classes do mesmo pacote
tem acesso.
Conceitos
Exemplo
package app.sistema;
public class Ponto2Dv {
private double x;
public double y;
String label;

public Ponto2Dv(double x, double y, String label){


this.x=x;
this.y=y;
this.label=label;
}
}
Conceitos
Exemplo(cont.)
package app.sistema;
public class ExPonto2Dv {
public static void main(String[] args){
Ponto2Dv Q = new Ponto2Dv(1,1,”ponto inicial”);
Q.x=0; // erro
Q.y=1; // ok
Q.label=”teste”; // ok ! Mesmo pacote!
}
}
Conceitos
Métodos Acessores e Modificadores
 Método Acessor: método, geralmente
público, que dá acesso de leitura a um
atributo da classe.
 Método Modificador (Mutante):
método, geralmente público, que dá
acesso de escrita a um atributo da classe.
Conceitos
Exemplo
public class Aluno {
private String nome;
private int matricula;
public int getMatricula() {
return matricula;
}
public void setMatricula(int matricula) {
this.matricula = matricula;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Conceitos
Encapsulamento:
 encapsular significa “esconder/proteger a
implementação” do usuário da classe.
 na prática, isso significa, principalmente,
deixar os atributos (dados) private/protected.

Método Atributos
Modificador Encapsulados

Método
Acessor
Conceitos
Sobrecarga de Métodos:
 Sobrecarga de métodos permite que dentro
de uma mesma classe, métodos que tenham
o mesmo nome mas que tenham diferentes
parâmetros.
• em outras palavras, dizemos que podemos criar
métodos com a mesma assinatura.
• da mesma forma que existe sobrecarga de
métodos, existem a sobrecarga de construtor.
 método sobrecarregado
• overload
Conceitos
POO – parte 3
 Herança
• Sobrescrita
 Interfaces
Conceitos
 Herança:
 mecanismo da POO que permite que uma
classe seja definida a partir de uma outra pré-
existente.

 A nova classe (classe filha) herda todos os


atributos e métodos da classe mãe (progenitora).
 Observação: devemos considerar a visibilidade

 Herança Simples x Herança Composta


 Sintaxe (Java):
 class ClasseFilha extends ClassePai
Conceitos
Sobrescrita (override)
 Na classe filha é possível re-escrever um
método existente na classe pai
• Mesma assinatura da classe Pai

• A visibilidade pode ser MENOS restritiva


– private (mais restritiva)
– default
– protected
– public (menos restritiva)
Conceitos
Exemplo
public class ponto2D {
protected double x;
protected double y;
protected String label;

ponto2D(){
x=0;y=0;label="nenhum";
}

public void imprime(){


System.out.println("x= "+x+"\n y="+y);
}
}
Conceitos
Exemplo(cont.)
public class ponto3D extends ponto2D{
protected double z;
ponto3D(){
super();
z=0;
}
public void imprime(){
super.imprime();
System.out.println("z="+z);
}
}
Conceitos
Aspectos particulares da Herança no
Java:
 Toda classe é filha da classe Object
 Java somente permite Herança Simples
 Utilização de Herança:
• Relacionamento “É UM”
PESSOA

É UM (A)

ALUNO
Conceitos
Diagrama de Classes

Conceitos
Interfaces
 As interfaces em Java são similares às classes
 Possuem hierarquia de forma similar às classes
• É possível utilizar extends entre interfaces
 As interfaces definem comportamentos
• Na forma de uma lista de métodos públicos
 Definem o que uma classe deve implementar e não
como essa classe irá implementar.
 Se uma classe implementa uma interface, ela
deverá implementar todos os
métodos/comportamentos desta interface.
Conceitos
Exemplo:
public interface Imprimivel{
public void imprime();
public Map getConfiguracoesImpressora();
public void setConfiguracao(String chave, String valor);
}

 Acima temos um aspecto geral de como é


definida de uma interface
 Observe que a sintaxe utilizada é similar ao da
classe – mas ao invés de utilizar class utilizamos
interface.
Conceitos
Exemplo (cont.)
public class Aluno implements Imprimivel{
Imprimivel
private String nome;
private int matricula;
public Map getConfiguracoesImpressora() {
// codigo
return null;
}
public void imprime() {
// codigo
}
public void setConfiguracao(String chave, String valor) {
// codigo
}
}
Conceitos
Classes Abstratas
 Não são instanciadas
 Podem definir métodos sem implementação
• Esses métodos também utilizam o modificador
abstract
• Neste caso, se uma classe (concreta) extender
(extends) essa classe abstrata, ela DEVERÁ
implementar esses métodos.
Conceitos
Exemplo de classe Abstrata:
public abstract class Aluno {
private String nome;
private int matricula;
public Aluno(String nome, int matricula){
this.nome=nome;
this.matricula=matricula;
}
public abstract void imprime();
}
Conceitos
Outros conceitos
 Atributos e Métodos estáticos
 Classe Final
 Wrappers e AutoBoxing (*)
 Tratamento de Exceções (*)
Conceitos
POO – Parte 4
 Polimorfismo
Conceitos
Polimorfismo
 Pilares da Programação Orientada a Objetos:
• Encapsulamento
• Herança
• Polimorfismo
Conceitos
Polimorfismo
 É o mecanismos da POO que permite que
um serviço apresente diversos
comportamentos.

 Tipos de Polimorfismo em Java:


• Polimorfismo de Inclusão
• Sobrecarga
• Sobreposição ou sobrescrita
Conceitos
 A sobrecarga é a possibilidade de
implementação de métodos que possuam
a mesma assinatura de método mas que
diferem nos parâmetros passados para o
método.
 Esses métodos podem estar em classe pai e
filha.

 A sobreposição é a possibilidade de re-


escrevermos um método de uma ancestral
utilizando a mesma assinatura.
Conceitos
Polimorfismo de Inclusão
 O polimorfismo de inclusão permite a criação
de variáveis polimórficas, isto é, variáveis (ou
objetos) de determinada classe que
apresentam comportamentos distintos de
acordo com o objeto que recebe.
Conceitos
 Exemplo
package app.poli;
public class Pessoa {
public String nome;
public void imprime(){
System.out.println("Nome:"+nome);
}
}
 package app.poli;
public class Aluno extends Pessoa{
public int matricula;
public void imprime(){
super.imprime();
System.out.println("Matricula:"+matricula);
}
}
Conceitos
Exemplo (cont.)
package app.poli;
public class Ex {
public static void main(String[] args) {
Pessoa A = new Pessoa();
A.nome="Ricardo";
Pessoa B = new Pessoa();
B.nome = "Ana";
Aluno C = new Aluno();
C.nome="Waleska";
C.matricula=123;
Aluno D = new Aluno();
D.nome="Luiz";
D.matricula=112;
Pessoa E = new Pessoa();
E.nome="Leandro";
Conceitos
 Exemplo(cont.)
Pessoa[] vetor = {A,B,C,D,E};
for(int i=0; i<vetor.length; i++){
vetor[i].imprime();
}
}
}
 Qual o resultado ?
Nome:Ricardo
Nome:Ana
Nome:Waleska
Matricula:123
Nome:Luiz
Matricula:112
Nome:Leandro
Conceitos
 Desafio. E se modificarmos a primeira
parte do código para o seguinte ?
 Observe que as instâncias C e D são da classe
Aluno mas as referências são de Pessoas
Pessoa A = new Pessoa();
A.nome="Ricardo";
Pessoa B = new Pessoa();
B.nome = "Ana";
Pessoa C = new Aluno();
C.nome="Waleska";
Pessoa D = new Aluno();
D.nome="Luiz";
Pessoa E = new Pessoa();
E.nome="Leandro";
Conceitos
 Resultado:
Nome:Ricardo
Nome:Ana
Nome:Waleska
Matricula:0
Nome:Luiz
Matricula:0
Nome:Leandro
Conceitos
 Desafio Final
public class A {
public int getValor(){
return 1;
}
}

public class B extends A{


public int getValor(){
return 2;
}
}
Conceitos
 Desafio Final
public class Codigo {
public static void main(String[] args) {
A p1 = new A();
B p2 = new B();
A p3 = new B();
System.out.println(p1.getValor());
System.out.println(p2.getValor());
System.out.println(p3.getValor());

}
}
Conceitos
 Resultado do Desafio Final
1
2
2
Conclusão
 Chegamos aqui ?
Prof. Ricardo Sant'Ana