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

Slides:



Advertisements
Apresentações semelhantes
Paulo Marques Hernâni Pedroso
Advertisements

Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Java: Pacotes e Modificadores de Visibilidade
Java: Pacotes e Modificadores de Visibilidade
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Iniciação ao Java – Márcio F. Campos
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Aula 8 Orientação à Objetos
UMA ABORDAGEM SOBRE ORIENTAÇÃO A OBJETOS!
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
Revisão POO Profa. Cintia Carvalho Oliveira
Curso de extensão em Desenvolvimento Web
JAVA: Conceitos Iniciais
Concorrência em Java Threads em Java.
Introdução a programação (if669cc)
Programação Orientada a Objetos com Java
Linguagem de Programação C#
Aula prática 13 Orientação a Objetos – C++ Parte 1
Análise da linguagem Java Planejamento. Objetivos Apresentar as soluções de implementação em Java para os conceitos de Orientação a Objetos introduzidos.
Flávia Andrade de Souza Rodrigo Mibielli Peixoto
JAVA Linguagem Ambiente de Desenvolvimento
Caio Argolo Luiz Daud Jorge Roberto
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Programação I Aula 2 (Métodos)
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Erick Luis Moraes de Sousa
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof
Orientação a Objetos Parte I
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Paradigmas de Linguagens de Programação Aula 2
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada a Objetos - Java
Tratamento de Exceções
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Introdução às Java Threads
Orientação a Objetos usando Java
Java Kickstart, day 2 Semelhanças com linguagem C.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Interfaces POO Avançado.
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Herança e Arquitetura em camadas
Introdução JAVA Faculdade Mauricio de Nassau
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
Herança Modelagem e Programação Orientada a Objetos
Construtores e Destrutores
Bruno Inojosa MCP .NET Framework
Modificadores Programação II.
Módulo II Capítulo 1: Orientação a Objetos
Capítulo 15 – Tratamento de Exceções
Padrões de Projeto Aula 9 – Padrão Adapter.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
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.
Transcrição da apresentação:

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

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

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.

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…

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);

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

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.

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.

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

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.

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.

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.

Herança e Interface 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); 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);

Interface, Point3d e Line são obrigadas a definir os Herança e Interface Exemplos public class Point3d extends Point2d implements Colored { Color color; … modifyColor(Color color) { this.color = color; } Color getColor() { return this.color; interface Colored { modifyColor(Color color); Color getColor(); } public class Line implements Colored { … Como implementam a Interface, Point3d e Line são obrigadas a definir os métodos declarados na interface.

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.

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

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.

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.

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.

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

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.

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%

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.

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

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

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.

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.

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.

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.