Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Documentos relacionados
Linguagens de Programação Aula 12

Suporte a programação orientada a objetos

3.4. Programação Orientada a Objetos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

Conceitos de Programação Orientada a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Programação Orientada a Objetos

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Linguagem de Programação III

Classe Abstrata e Interface

LINGUAGEM DE PROGRAMAÇÃO

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Palavras Reservadas da Linguagem Java

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

C com introdução a OO

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

Nomes, vinculações e escopos

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Programação orientada a objetos

Paradigmas de Linguagens de Programação. Subprogramas

Nomes, vinculações e escopos

Polimorfismo. O que é polimorfismo?

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Programação por Objectos. Java

Linguagem de Programação IV Introdução

POO e C++: Herança e Polimorfismo

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

UNIFEI Disciplina Professor

Orientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

Java para Desktop. Programação Orientada à Objetos 2 JSE

Encapsulamento e Modularização

Classes e Objetos. Sintaxe de classe em Java

Encapsulamento e Modularização

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Polimorfismo: aprendendo a prever o futuro. Polimorfismo: aprendendo a prever o futuro. Definições (2/5) Definições Tipos de Polimorfismo

9 Classes Abstractas e Interfaces

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Capítulo 9. Subprogramas

Linguagem de Programação I Apresentação da Disciplina

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Herança Tiago Eugenio de Melo

O PARADIGMA ORIENTADO POR OBJETOS

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Laboratório de programação II

Modelo do Mundo Real. Abstração. Interpretação

Linguagens de Programação

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Programação Orientada a Objetos para Redes de Computadores

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Classes e Encapsulamento

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Introdução a Programação Orientada a Objetos

Curso Profissional de Gestão e Programação de Sistemas Informáticos

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Introdução a orientação a objetos

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Introdução ao Java. Prof. Herbert Rausch Fernandes

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Herança e Polimorfismo (Universal)

Universidade Federal de Uberlândia

Capítulo 2. Orientação a Objetos

Linguagem de Programação. Diagrama de classes

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Classes, Métodos e Propriedades

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

1 Introdução e Conceitos básicos

Orientação a Objetos (OO) Java Avançado Revisão do Paradigma de. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

Aprendendo. Java 2. Rodrigo Mello Ramon Chiara Renato Villela. Novatec Editora Ltda.

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas

Computação II Orientação a Objetos

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Orientada a Objeto (POO)

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos SANTOS, Rafael

Programação Orientada a Objetos

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Conceitos de Linguagens de Programação

Reinaldo Gomes Análise/projeto estruturado

Programação Orientada a Objeto (POO)

Classe Interna (Inner)

Programação Orientada a Objetos

Programação Orientada a Objetos JAVA - NETBEANS

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

Laboratório de Programação. Aula 2 Java 5COP088. Aula 2 Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Televisao tamanho tela emitirsom. conectarperifericos

Namespaces, Classes e Métodos.

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Transcrição:

Suporte para Programação Orientada a Objeto Cristiano Lehrer

Categoria das Linguagens que Suportam POO Suporte a POO acrescentado a uma linguagem já existente: C++ (também suporta programação procedural e orientada a dados). Ada 95 (também suporta programação procedural e orientada a dados). CLOS (também suporta programação funcional). Scheme (também suporta programação funcional). Suporte a POO, mas com a mesma aparência e usam a mesma estrutura básica das linguagens imperativas mais antigas: Eiffel (não foi baseada diretamente em nenhuma linguagem anterior). Java (baseada no C++). Linguagens de POO puras: Smalltalk.

Evolução do Paradigma Procedural 1950s - 1970s: Abstração procedural. Orientada a dados início dos anos 80: Orientada a dados. POO final dos anos 80: Herança e binding dinâmico.

Origem da Herança Observações de meados dos anos 80: Aumento da produtividade pode vir da reutilização. TADs são difíceis de reutilizar: Quase nunca corretamente. Todos os TADs são independentes e estão num mesmo nível. Herança resolve ambos: Reutilização de TADs após modificações menores e define classes em uma hierarquia.

TADs são chamados classes. Definições sobre POO (1/3) Instâncias de classes são chamadas objetos. Uma classe herdeira é chamada classe derivada ou uma subclasse. A classe da qual outra classe é herdeira é chamada classe-pai ou super-classe. Subprogramas que definem operações sobre objetos são chamados métodos. A coleção completa de métodos de um objeto é chamada de seu protocolo de mensagens ou interface.

Definições sobre POO (2/3) Mensagens possuem duas partes o nome do método e o objeto de destino. No caso mais simples, uma classe herda todas as entidades de seu pai. Herança pode ser complicada por controles de acesso para entidades encapsuladas: Uma classe pode ocultar entidades de suas subclasses. Uma classe pode ocultar entidades de seus clientes. Além dos métodos padrão de herança, uma classe pode modificar um método herdado: O novo método substitui o herdado. O método na classe pai é sobrepujado.

Definições sobre POO (3/3) Existem dois tipos de variáveis em uma classe: Variáveis da classe. Variáveis da instância. Existem dois tipos de métodos em uma classe: Métodos da classe mensagens para a classe. Métodos da instância mensagens para objetos. Herança simples versus herança múltipla. Desvantagens de herança por reutilização: Cria interdependências entre classes que complicam a manutenção.

Polimorfismo em POO Uma variável polimórfica pode ser definida em uma classe que é apta a referenciar (ou apontar) a objetos da classe e objetos de qualquer de seus descendentes. Quando uma hierarquia de classes inclui classes que sobrepõe métodos que são chamados através de uma variável polimórfica, o binding para o método corrente deve ser dinâmico. Polimorfismo simplifica a adição de novos métodos. Um método virtual é aquele que não inclui uma definição (apenas define um protocolo). Uma classe virtual é aquela que inclui ao menos um método virtual. Uma classe virtual não pode ser instanciada.

Questões de Projeto para POO (1/5) A exclusividade de objetos: Tudo são objetos: Vantagens: elegância e pureza. Desvantagens: operações lentas em objetos simples. Adiciona objetos a um sistema de tipagem completa: Vantagens: operações rápidas em objetos simples. Desvantagens: resulta em um sistema de tipagem confuso. Inclui um sistema de tipagem de estilo Imperativo para primitivas mas considera todo o resto como objeto: Vantagem: operações rápidas em objetos simples e um sistema de tipagem relativamente pequeno. Desvantagem: (ainda) alguma confusão devido aos dois sistemas de tipagem.

Questões de Projeto para POO (2/5) Subclasses são subtipos: Um relacionamento é-um é mantido entre uma classe pai e um objeto da subclasse. Herança de Implementação e de Interface: Se apenas a Interface de uma classe-pai está visível para a subclasse, trata-se de herança de interface: Desvantagem: pode resultar em ineficiências. Se tanto a Interface quanto a Implementação da classe-pai está visível para a subclasse, trata-se de herança de Implementação: Desvantagem: modificações na classe-pai requerem recompilação de subclasses algumas vezes até a modificação das subclasses.

Questões de Projeto para POO (3/5) Verificação de tipo e polimorfismo: Polimorfismo pode requerer verificação dinâmica de tipos de parâmetros e do valor retornado: Verificação dinâmica de tipos é onerosa e retarda detecção de erros. Se métodos de sobreposição são restritos a ter os mesmos tipos de parâmetro e valor de retorno, a verificação pode ser estática.

Questões de Projeto para POO (4/5) Herança simples e múltipla: Desvantagem de herança múltipla: Complexidade da linguagem e Implementação. Ineficiência potencial binding dinâmico é mais oneroso com herança múltipla (mas não muito). Vantagem: Algumas vezes é extremamente conveniente e valiosa.

Questões de Projeto para POO (5/5) Alocação e desalocação de objetos: A partir de onde os objetos são alocados: Se eles todos estiverem no heap, referências a eles são uniformes. A desalocação é explicita ou implícita. Binding dinâmico: Todas as mensagens para métodos deveriam ser dinâmicas.

Visão Geral do Smalltalk (1/3) Smalltalk é uma linguagem de POO pura: Tudo são objetos. Toda computação é através de objetos enviando mensagens a objetos. Ela não adota a aparência das linguagens Imperativas. O ambiente Smalltalk: O primeiro sistema com Interface gráfica (GUI) completo. Um sistema completo para desenvolvimento de software. Todo o código fonte do sistema é disponível para o usuário, que pode modifica-lo, caso deseje.

Visão Geral do Smalltalk (2/3) cont < 1. soma < 0. [cont <= 20] "O bloco que contém a definição de loop" whiletrue: [soma < soma + count. cont < cont + 1] "O corpo do loop"

Visão Geral do Smalltalk (3/3) fatorial self = 0 iftrue: [^1]. self < 0 iftrue: [self error 'Fatorial não definido'] iffalse: [^self * (self 1) fatorial]

C++ (1/6) Características gerais: Sistema de tipagem mista. Construtores e destrutores. Cuidadoso controle de acesso a entidades de classe. Herança: Uma classe não necessita ser subclasse de nenhuma classe. Controle de acesso para membro são: private (visível apenas na classe e amigos ). public (visível nas subclasses e clientes). protected (visível na classe a nas subclasses).

C++ (2/6) Em adição, o processo de hierarquização em subclasses pode ser declarado com controles de acessos, os quais definem mudanças potenciais no acesso por subclasses. Herança múltipla é permitida. Binding dinâmico: Um método pode ser definido como virtual, o que significa que ele pode ser chamado através de variáveis polimórficas e dinamicamente ligados (binding) a mensagem. Uma função virtual pura não tem definição alguma. Uma classe que tem ao menos uma função virtual pura é uma classe abstrata.

C++ (3/6) Avaliação: Provê extensivo controle de acesso. Provê herança múltipla. O programador deve decidir em tempo de projeto, quais métodos terão binding estático e quais terão binding dinâmico. Binding estático é mais rápido.

C++ (4/6) class classe1 { private: int a; float x; protected: class subclasse1: public classe1 {...} b e y: protegidos c e z: públicos a e x: inalcançáveis int b; float y; public: int c: float z; class subclasse2: private classe1 {...} b, c, y e z: privados a e x: inalcançáveis };

C++ (5/6) class lista_ligada_simples { class vertice { friend class lista_ligada_simples; private: vertice *ligacao; int conteudos; }; private: vertice *topo; public: lista_ligada_simples() {topo = 0}; void insere_no_topo(int); void insere_no_fim(int); int remove_do_topo(); int vazio(); };

C++ (6/6) class pilha: public lista_ligada_simples { public: pilha() {} void push(int valor){ lista_ligada_simples::insere_no_topo(valor); } int top(){ return lista_ligada_simples::remove_do_topo(); } };

Java (1/3) Características gerais: Todos os dados são objetos, exceto os tipos primitivos. Todos os tipos primitivos possuem classes empacotadoras que armazenam um valor (de dados): int Integer double Double char Character Todos os objetos são dinâmicos no heap, são referenciados através de referência, e a maioria é alocada com new.

Java (2/3) Herança: Somente herança simples, mas existe uma categoria de classe abstrata que provê alguns dos benefícios de herança múltipla (interface). Uma Interface pode incluir apenas declarações de métodos e constantes nomeadas. Métodos podem ser final (não podem ser sobrepostos). public class Clock extends Applet implements Runnable Binding Dinâmico: Em Java, todas as mensagens tem binding dinâmico aos métodos, exceto quando método é final.

Java (3/3) Encapsulamento: Dois compostos, classes e pacotes. Pacotes provêem em container para classes que são relacionadas. Entidades definidas sem um modificador de escopo (access) tem o escopo do pacote, que os faz visíveis através do pacote no qual eles são definidos. Toda classe num pacote é amiga para as entidades no escopo do pacote (que encontram noutro lugar no pacote).