A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Uma comparação segundo os princípios da Orientação à Objetos."— Transcrição da apresentação:

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

2 Introdução à linguagem Java Histórico O 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é.

3 Introdução à linguagem Java Padrão Aberto Padrã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.

4 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 D…

5 Estrutura básica de uma classe Java Exemplo 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); }

6 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

7 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.

8 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.

9 Gerenciamento de memória Garbage Collection O gerenciamento de memória é feito através de procedimentos similares. Influenciou o comportamento na linguagem Java.

10 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.

11 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.

12 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.

13 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); } Exemplos public 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); }

14 Herança e Interface interface Colored { modifyColor(Color color); Color getColor(); } public class Line implements Colored { … } Exemplos public 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 declarados na interface.

15 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.

16 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

17 Polimorfismo Sobreposição de atributos e operações Em 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.

18 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.

19 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.

20 Domínios de Classes Pacotes do JDK - Core API java.lang - matemática e strings java.util - estrutura de dados java.io - entrada e saída java.net - acesso à rede java.applet - interação com a Web java.awt - interação com a GUI java.math - matemática criptográfica java.beans - componentização

21 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.

22 Espaço-estado e comportamento Invariantes, Pré-condições e Pós-condições Java 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%

23 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.

24 Componentes Exemplo class Conta{ Double saldo; Double getSaldo();{ return saldo; } void setSaldo(Double quantia){ saldo = quantia; } } class ContaBeanInfo{ /*.....*/}

25 Componentes Eiffel por ser puramente OO suporta plenamente componentização

26 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.

27 Exceções Exemplo try { 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.

28 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.

29 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.


Carregar ppt "Uma comparação segundo os princípios da Orientação à Objetos."

Apresentações semelhantes


Anúncios Google