Programação Orientada a Objetos*

Slides:



Advertisements
Apresentações semelhantes
Programação Orientada a Objetos*
Advertisements

Programação Orientada a Objetos*
Programação Orientada a Objetos*
Classes C++ Class nome da classe { private: membros privados
PHPOO Erick Souza. Conceitos de Orientação a Objetos Objeto é um conceito ou item(concreto ou abstrato). Software orientado a objetos Uma classe é uma.
Polimorfismo e Classes Abstratas Profa
Capítulo 9 Herança 1.
Curso de extensão em Desenvolvimento Web
Programação Orientada a Objetos com Java
C# Herança Sharp Shooters .NET Universidade Federal de Pernambuco Centro de Informática Recife, 23/09/2002 Autor: Marden Menezes Costa.
Orientação a Objetos Parte II
Prof. Gilberto Irajá Müller
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Classes Abstratas e Interface
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Operador Condicional (? :). Operador Condicional Operador ternário que pode ser utilizado no lugar de uma instrução if...else.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Atributos e Métodos Restrições de Acesso Encapsulamento Herança.
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Generalização, Especialização e Conceitos Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.
Classe Abstrata É uma classe que não pode ser instanciada; Freqüentemente aparece no topo de uma hierarquia de classes de programação orientada a objetos;
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal
Polimorfismo e suas aplicações em C++.
(baseado em slides de ex-alunos)
Introdução OO.
Curso básico de linguagem Java
Introdução Java.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
COM222 DESENVOLVIMENTO DE SISTEMAS WEB
Linguagem Orientada a Objetos 2
Projeto de PLP (2006.1) Extensão da Linguagem OO1
Java: Interfaces Alcides Calsavara.
Singleton e Template Method
Criação e manipulação de objetos
Unidade IV– Relacionamento entre Objetos
Unidade V – Herança e Ligação Dinâmica
Programação Orientada a Objetos
Programação Orientada a Objetos
Desenvolvimento de Sistemas Orientados a Objetos
Programação Orientada a Objetos*
Unidade VI – Exceções e Interfaces
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos*
3.2 Sobrecarga de Métodos (Overloading)
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Rosemary Silveira Filgueiras Melo
Compilação de Linguagens OO
RESULUÇÃO DOS EXERCÍCIOS,
Programação Orientada a Objetos
Estruturas Condicionais
Programação de Computadores II
Transcrição da apresentação:

Programação Orientada a Objetos* Interfaces Prof. Isabel Cafezeiro isabel@dcc.ic.uff.br http://www.dcc.ic.uff.br/~isabel *Baseado no livro Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos – Editora Campus – Série SBC

Interfaces Classes abstratas que possuem apenas métodos abstratos Na Interface: Métodos são implicitamente abstract e public Campos são implicitamente static e final Não possuem construtores assim como as classes abstratas, as interfaces não podem ser instanciadas.

Interfaces ObjetoGeométrico centro( ) calculaÁrea( ) calculaPerímetro( ) Circulo raio centro Circulo(c,r){ ... } centro( ) { ... } calculaÁrea( ) { ... } calculaPerímetro( ) { ... } toString( ) { ... } Retangulo primeiroCanto segundoCanto Retangulo(pc,sc){ ... } centro( ) { ... } calculaÁrea( ) { ... } calculaPerímetro( ) { ... } toString( ) { ... }

Interfaces interface ObjetoGeometrico { Ponto2D centro(); double calculaÁrea(); double calculaPerímetro(); } // fim da interface ObjetoGeometrico ObjetoGeométrico.java declaração diferente de classes métodos sem modificadores abstract e public É possível fazer o uso de outras classes na assinatura dos métodos.

Interfaces class Circulo implements ObjetoGeometrico { private Ponto2D centro; private double raio; Circulo(Ponto2D centro,double raio) { this.centro = centro; this.raio = raio; } public Ponto2D centro() { return centro; } public double calculaÁrea() { return Math.PI*raio*raio; } public double calculaPerímetro() { return 2.0*Math.PI*raio; } public String toString() { return "Círculo com centro em "+centro+" e raio "+raio; } } // fim da classe Circulo Circulo.java Cláusula de herança Todos os métodos da interface são implementados. Devem ser sobrescritos com modificador public. Aula10: private, protected ou modificador ausente tornariam o acesso mais restritivo. Aula10: modificador static também não é permitido

Interfaces class Retangulo implements ObjetoGeometrico { private Ponto2D primeiroCanto,segundoCanto; Retangulo(Ponto2D pc,Ponto2D sc) { primeiroCanto = pc; segundoCanto = sc; } public Ponto2D centro() { double coordX = (primeiroCanto.getX()+segundoCanto.getX())/2.; double coordY = (primeiroCanto.getY()+segundoCanto.getY())/2.; return new Ponto2D(coordX,coordY); } public double calculaÁrea() { ... } public double calculaPerímetro() { .... } public String toString() { return "Retângulo com cantos "+primeiroCanto+" e "+segundoCanto; } } // fim da classe Retangulo Retangulo.java Métodos da interface implementados de forma diferente da classe Circulo

Interfaces class DemoObjetosGeometricos { public static void main(String[] argumentos) { Circulo c1 = new Circulo(new Ponto2D(0,0),100); Retangulo r1 = new Retangulo(new Ponto2D(-2,-2), new Ponto2D(2,2)); imprimeTodosOsDados(c1); imprimeTodosOsDados(r1); } private static void imprimeTodosOsDados(ObjetoGeometrico og) { System.out.println(og); System.out.println("Perímetro:"+og.calculaPerímetro()); System.out.println("Área:"+og.calculaÁrea()); System.out.println(); DemoObjetosGeometricos.java A interface como parâmetro ou retorno de método: instância de subclasse deverá ser passada (Polimorfismo: aula10).

Interfaces class DemoObjetosGeometricosEPolimorfismo { public static void main(String[] argumentos) { ObjetoGeometrico o1,o2; o1 = new Circulo(new Ponto2D(0,0),20); o2 = new Retangulo(new Ponto2D(-1,-1), new Ponto2D(1,1)); System.out.println("o1 é um Círculo ? "+ (o1 instanceof Circulo)); System.out.println("o1 é um Retângulo ? "+ (o1 instanceof Retangulo)); System.out.println("o1 é um ObjetoGeometrico ? "+ (o1 instanceof ObjetoGeometrico)); .... } } // fim da classe DemoObjetosGeometricosEPolimorfismo DemoObjetosGeometricosEPolimorfismo.java Referências à interface .... .... apontando para instâncias das subclasses. (Polimorfismo: aula10). Verifique que o1 é círculo e também é objeto geométrico

Interfaces e Herança Múltipla Modelar Objetos Geométricos Modelar Objetos escaláveis Nem todo objeto geométrico deve ser escalável !!! Nem todo objeto escalável deve ser geométrico !!!

Interfaces e Herança Múltipla Escalavel Objeto Geométrico Circulo Escalavel Toda subclasse neste nível é necessariamente Objeto Geométrico e escalável !!! Como fazer um objeto geométrico que não seja escalável ???

Interfaces e Herança Múltipla Objeto Geométrico Circulo Escalavel Este círculo não é escalável !!! Mas e se for necessário definir outras classes que não sejam objetos geométricos e que sejam escaláveis???? Circulo Escalavel

Interfaces e Herança Múltipla Objetos Geométricos Objetos Escaláveis Nem todo objeto geométrico é escalável !!! Nem todo objeto escalável é geométrico !!! Características independentes !!!

Interfaces:Herança Múltipla “controlada” ObjetoGeométrico centro( ) calculaÁrea( ) calculaPerímetro( ) Escalável amplia( e ) espelha( ) CirculoEscalável raio centro CirculoEscalável(c,r){ ... } centro( ) { ... } calculaÁrea( ) { ... } calculaPerímetro( ) { ... } amplia( e ) { ... } espelha( ) { ... } toString( ) { ... }

Interfaces interface Escalavel { void amplia(double escala); void espelha(); } // fim da interface Escalavel Escalavel.java

Interfaces class CirculoEscalavel implements ObjetoGeometrico,Escalavel { private Ponto2D centro; private double raio; CirculoEscalavel(Ponto2D centro,double raio) { this.centro = centro; this.raio = raio; } public Ponto2D centro() { return centro; } public double calculaÁrea() { return Math.PI*raio*raio; } public double calculaPerímetro() { return 2.0*Math.PI*raio; } public void amplia(double escala) { raio *= escala; } public void espelha() { centro = new Ponto2D(-centro.getX(),centro.getY()); } public String toString() { return "Círculo com centro em "+centro+" e raio "+raio; } } CirculoEscalavel.java cláusula de herança múltipla

Conflitos em Herança Múltipla Conflitos de métodos: As superclasses possuem métodos com mesma assinatura. Qual deles herdar??? Conflitos de campos: As superclasses possuem campos com mesmo nome. Qual deles herdar ???

Conflitos em Herança Múltipla Solução de C++: herança seletiva Solução de Java: interfaces Não há conflito de métodos porque a sobrescrição é obrigatória nas classes herdeiras O compilador detecta conflito de campos e não compila a classe herdeira.

Classes abstratas e interfaces Exercício: Objeto Geométrico Escalavel implements Circulo implements extends Circulo Escalavel É possível? DemoCirculoEscalável continua funcionando?