29
Uma comparação segundo os princípios da Orientação à Objetos

Uma comparação segundo os princípios da Orientação à Objetos

Embed Size (px)

Citation preview

Page 1: Uma comparação segundo os princípios da Orientação à Objetos

Uma comparação segundo os princípios da Orientação à Objetos

Page 2: Uma comparação segundo os princípios da Orientação à Objetos

Introdução à linguagem Java

HistóricoO Projeto Green

Um sistema para uso em produtos de consumo eletrônicos.

O C++ não funcionou e uma nova linguagem era necessária.

James Gosling, programador de rede assume o projeto.

O nome Java Inspirado em uma loja de café.

Page 3: Uma comparação segundo os princípios da Orientação à Objetos

Introdução à linguagem Java

Padrão AbertoPadrão homologado internacionalmente

Aprovado pela ISO/IEC JTC-1. Implementações Java podem ser disponibilizadas por

terceiros para qualquer plataforma. Fidelidade e compatibilidade com a especificação

original é atestada em conjunto com a IBM e a Netscape.

O executável Java é compatível com qualquer implementação em qualquer plataforma, roda sem ter o códgo fonte recompilado.

Page 4: Uma comparação segundo os princípios da Orientação à Objetos

Introdução à linguagem Java

Arquitetura

O Java roda sobre uma máquina virtual que abstrai particularidades da máquina hospedeira.

O código desta máquina virtual, chamado bytecode, é verificado antes de ser executado, evitando que seja corrompido em sua transferência.

Código fonte em Java

Compilador Java

CA FE BE 00 03 00 2D…

Page 5: Uma comparação segundo os princípios da Orientação à Objetos

Estrutura básica de uma classe Java

Exemplopublic class Point2d {

int x, y;Point2d(int x, int y) {

this.x = x;this.y = y;

}Point2d() {

this(0,0);}double length() {

return Math.sqrt(x*x + y*y);}

}

Page 6: Uma comparação segundo os princípios da Orientação à Objetos

Estrutura básica de uma classe Java

Visibilidade de atributos e operações

Estes são os modificadores de visibilidade para atributos e operações:

public - acesso a partir de todas as classes protected - acesso a partir de todas as classes filhas e

do mesmo pacote friendly - acesso a partir de classes do mesmo pacote

(não precisa ser declarado) private - acesso exclusivamente pela própria classe

Page 7: Uma comparação segundo os princípios da Orientação à Objetos

Gerenciamento de memória

Garbage Collector

A alocação de memória é dinâmica Todos os objetos em Java são alocados

dinamicamente quando explicitamente solicitados. Não existem ponteiros em Java: o acesso aos objetos

é feito através de referências. O cálculo do espaço a ser alocado é de

responsabilidade exclusiva do compilador e o programador não pode nem precisa intervir.

Page 8: Uma comparação segundo os princípios da Orientação à Objetos

Gerenciamento de memória

Garbage Collector

A liberação de memória alocada é automática Todas as referências a um determinado objeto são

contabilizadas pelo gerenciador de memória. Objetos que não tiverem referência são destruídos

automaticamente pelo “garbage collector”. Programadores não precisam se preocupar em

descartar explicitamente um objeto. Basta remover todas as suas referências.

Page 9: Uma comparação segundo os princípios da Orientação à Objetos

Gerenciamento de memória

Garbage Collection

O gerenciamento de memória é feito através de procedimentos similares.

Influenciou o comportamento na linguagem Java.

Page 10: Uma comparação segundo os princípios da Orientação à Objetos

Herança

Hierarquia de classes

Todas classes herdam implicitamente da classe Object (raiz)

A classe Object já tem implementações prontas de métodos que facilitam a implementação de novas classes.

Métodos como de serialização, construtor e representação em String já estão prontos e ainda podem ser redefinidos caso necessário.

Page 11: Uma comparação segundo os princípios da Orientação à Objetos

Herança

Hierarquia de classes

Todas classes herdam implicitamente da classe GENERAL (raiz), de forma similar ao Java.

A EKLS (Eiffel Kernel Library Standard) define também outras outras 25 classes que provêem funcionalidades essenciais das quais o desenvolvedor pode herdar.

Page 12: Uma comparação segundo os princípios da Orientação à Objetos

Herança e Interface

Heranças simples e múltipla

Java suporta apenas herança simples.

Para contornar a falta da herança múltipla ela usa interfaces, que só possuem as declarações dos métodos.

Uma classe pode implementar várias interfaces, possibilitando o uso de um certo tipo de “herança múltipla”, porém descartando os perigos da mesma.

Uma interface pode ser implementada em várias classes de hierarquias diferentes.

Page 13: Uma comparação segundo os princípios da Orientação à Objetos

Herança e Interface

public class Point2d { int x, y; Point2d(int x, int y) { this.x = x; this.y = y; } Point2d() { this(0,0); } double length() { return Math.sqrt(x*x + y*y); }}

Exemplospublic class Point3d extends Point2d {

int z;

Point3d(int x, int y, int z) {

super(x,y);

this.z = z;

}

Point3d() {

this(0,0,0);

}

double length() {

return Math.sqrt(x*x + y*y + z*z);

}

}

Page 14: Uma comparação segundo os princípios da Orientação à Objetos

Herança e Interface

interface Colored {

modifyColor(Color color);

Color getColor();

}

public class Line implements Colored {

}

Exemplospublic class Point3d extends Point2d implements Colored {

Color color;

modifyColor(Color color) {

this.color = color;

}

Color getColor() {

return this.color;

}

}Como implementam a

Interface, Point3d e Line são obrigadas a definir os

métodos declaradosna interface.

Page 15: Uma comparação segundo os princípios da Orientação à Objetos

Herança e Interface

Exemplos

Desta forma, implementamos “herança múltipla”, sendo válidas as seguintes atribuições:

Colored colored = new Point3d();

Colored colored2 = new Line();

Ambas as referências só visualizam os métodos da interface.

Page 16: Uma comparação segundo os princípios da Orientação à Objetos

Herança e Interface

Heranças simples e múltipla

Eiffel contém o melhor suporte nesta área, suportando herança simples, múltipla e repetida. (na qual uma classe desdende multiplamente de classes com ancestral comum)

Ele permite a seleção de quais atributos herdar duplamente ou não.

Além disso, também possui o conceito de interface, provendo encapsulamento e information hiding

Page 17: Uma comparação segundo os princípios da Orientação à Objetos

Polimorfismo

Sobreposição de atributos e operaçõesEm Java, o que identifica unicamente o método é o nome e a lista de argumentos. Nas subclasses podemos ter:

Overloading - definição de métodos de mesmo nome com listas de argumentos diferentes.

Overriding - definição de métodos de mesmo nome e lista de atributos.

Na herança, sobreposições são tratadas de acordo com as referências que estão acessando as mesmas.

Java não suporta sobrecarga de operadores.

Page 18: Uma comparação segundo os princípios da Orientação à Objetos

Polimorfismo

Sobreposição de atributos e operações

Eiffel, diferentemente do Java, não suporta sobrecarga de métodos, mas suporta mudança de nomes (renaming), no qual um método ancestral muda de nome para se adaptar semanticamente melhor ao novo contexto.

Eiffel suporta sobrecarga de operadores.

Page 19: Uma comparação segundo os princípios da Orientação à Objetos

Associações

Agregação

Java e Eiffel não suportam agregações explicitamente.

O fazem através de uma simples referência a outro objeto.

Composição

Novamente não suportam explicitamente.

O fazem colocando uma classe dentro da outra ou passando uma referência de uma no construtor da outra.

Page 20: Uma comparação segundo os princípios da Orientação à Objetos

Domínios de Classes

Pacotes do JDK - Core APIjava.lang - matemática e stringsjava.util - estrutura de dadosjava.io - entrada e saídajava.net - acesso à redejava.applet - interação com a Webjava.awt - interação com a GUIjava.math - matemática criptográficajava.beans - componentização

Page 21: Uma comparação segundo os princípios da Orientação à Objetos

Domínios de Classes

Existem bibliotecas de classes escritas em Eiffel para todo tipo de aplicação de uso comum, sendo as principais distribuídas pela Eiffel Software junto com o EiffelStudio.

Além disso, Eiffel pode integrar-se com código C e classes em C++, de maneira que a disponibilidade de classes para uso em Eiffel é enorme.

Page 22: Uma comparação segundo os princípios da Orientação à Objetos

Espaço-estado e comportamento

Invariantes, Pré-condições e Pós-condiçõesJava não provê suporte a invariantes, pré-condições ou pós-condições.

Desenho por Contrato : Eiffel provê suporte total a esse conceito de projeto de sistemas e o coloca como principal diferencial comparativo com outras linguagens

A Eiffel Software afirma que o desenho por contrato levado a sério pode reduzir os custos de depuração em até 95%

Page 23: Uma comparação segundo os princípios da Orientação à Objetos

Componentes

JavaBeans

Um componente é um conjunto de objetos que partilham a mesma arquitetura JavaBean e cumprem um determinado contrato.

Os componentes JavaBeans devem atender a uma regra de formação de nomes e atender a certos chamados de métodos.

Page 24: Uma comparação segundo os princípios da Orientação à Objetos

Componentes

Exemploclass Conta{

   Double saldo;

   Double getSaldo();{     return saldo;   }

   void setSaldo(Double quantia){     saldo = quantia;   }}

class ContaBeanInfo{ /*.....*/}

Page 25: Uma comparação segundo os princípios da Orientação à Objetos

Componentes

Eiffel por ser puramente OO suporta plenamente componentização

Page 26: Uma comparação segundo os princípios da Orientação à Objetos

Exceções

Try e Catch

Em java há suporte para tratamento de exceções em tempo de execução através das diretivas "try" e "catch".

Todo método que invoca outro que declarativamente lança uma exceção é obrigado a tratar internamente a exceção sem deixá-la se propagar ou declarar que também lança a mesma exceção ou uma outra exceção que esteja acima na hierarquia da primeira.

Page 27: Uma comparação segundo os princípios da Orientação à Objetos

Exceções

Exemplotry { c1.divide(c2);

}

catch(AritimethicException e) {   System.out.println("Impossible division by zero.");}

Toda vez que uma exceção ocorre em um método e não é tratada, é passada para o escopo do método que invocou o primeiro.

Page 28: Uma comparação segundo os princípios da Orientação à Objetos

Exceções

Uma exceção em Eiffel semanticamente indica “Quebra no Contrato", bastando que uma invariante, pré ou pós-condição de classe seja violada.

Comportamento imprevisto, intratável, no qual a única alternativa possível é tentar novamente (retry), ou falhar.

Page 29: Uma comparação segundo os princípios da Orientação à Objetos

Exceções

Desenho por contrato + exceções : Funciona bem detectando erros durante o processo de desenvolvimento

Abordagem oposta ao Java: a exceção, ainda que seja um erro, não é um imprevisto, mas uma classe bem definida, fazendo parte do próprio desenho da aplicação. O foco da estrutura try-catch é o controle do fluxo do programa pós-exceção.