Fundamentos de Orientação à objetos

Documentos relacionados
Conceitos de Orientação a Objetos

Classes e Objetos. Sintaxe de classe em Java

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

Classe Abstrata e Interface

Programação Orientada a Objetos

Programação Orientada a Objetos

Visibilidade e Encapsulamento

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

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

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Linguagem de Programação III

Conceitos de Programação Orientada a Objetos

C com introdução a OO

Capítulo 2. Orientação a Objetos

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

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

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

Orientação a objetos. Objetos ou Instâncias I

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

LINGUAGEM DE PROGRAMAÇÃO

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

Desenvolvimento de Aplicações Desktop

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

Linguagens de Programação Aula 12

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

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

Interfaces e Classes Abstratas

O PARADIGMA ORIENTADO POR OBJETOS

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

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

Laboratório de programação II

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Introdução à Programação Orientada a Objetos. Prof. Leonardo Barreto Campos 1

Introdução à Programação. Encapsulamento e Herança

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

Programação Orientada a Objetos

Daniel Wildt

Linguagem de Modelagem Unificada UML

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

Requisitos de sistemas

Conceitos de Programação Orientada a Objetos

Programação Java (nível intermediário) 4. Polimorfismo

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

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

Linguagem de Programação III

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

POO e C++: Herança e Polimorfismo

27) Em relação aos Projetos de Sistemas de Software, assinale a sequência correta de desenvolvimento de um sistema:

Orientação a Objetos (OO)

Entender o princípio do Polimorfismo; Conhecer Polimorfismo de Sobreposição e de Inclusão;

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

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

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Linguagem de Programação IV Introdução

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

PROGRAMAÇÃO ORIENTADA A

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

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

Sumário. BD Orientado a Objetos

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Modelo Conceitual. Análise e Projeto de Sistemas Avançados. Aula 5. Allan Rodrigo Leite

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

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

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

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Programação Orientada a Objetos JAVA - NETBEANS

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

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

COMPORTAMENTOS - Observações

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

A modelagem é tida como a parte central de todas as atividades para a construção de um bom sistema, com ela podemos:

Introdução à Orientação a Objetos

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

Transcrição:

Fundamentos de Orientação à objetos Prof. Gustavo Willam Pereira ENG10082 Programação II Créditos: Prof. Clayton Vieira Fraga Filho

Objeto Um objeto, como um substantivo, pode ser uma pessoa, local ou objeto? basicamente, qualquer conceito que seja aplicável ao projeto do sistema. Pode representar: o Uma coisa visível ou tangível o Algo que pode ser compreendido intelectualmente o Algo para o qual o pensamento ou ação pode ser dirigido ATENÇÃO!!! Objetos do mundo real não são os únicos tipos de objetos que são de interesse durante o desenvolvimento do software; 2

Objeto Jacobson et al. define "objetos de controle" como "aqueles que unem o fluxo de eventos e, portanto, fazem a comunicação com outros objetos Smith e Tockey fazem uma definição mais precisa, e sugerem que "um objeto representa um item individual, identificável, unidade ou entidade, real ou abstrata, com um papel bem definido no domínio do problema" 3

Objeto Um objeto é uma entidade que tem estado, comportamento e identidade. A estrutura e o comportamento de objetos similares são definidos em sua classe comum. O estado de um objeto considera todas as propriedades (geralmente estático) do objeto mais a os valores atuais (normalmente dinâmico) de cada uma dessas propriedades. O comportamento é como um objeto age e reage (ação), em termos de mudanças e seu estado de passagem de mensagem. 4

Objeto Um objeto de software mantém seu estado em uma ou mais de suas propriedades ou atributos (variáveis), e implementa seu comportamento através de seus métodos. Métodos (comportamento) Propriedades (estado) Objeto 5

Objeto Um sistema pode conter um ou inúmeros objetos ativos. Cada objeto ativo no sistema em particular também é chamado de instância. As diferentes instâncias possuem seu próprio estado. Exemplo: várias instâncias de pessoas. 6

Objeto Cada instância de pessoa possui um estado diferente em particular, como visto na última figura. Além do estado, a instância possui seus métodos (comportamento) que operam sobre o próprio estado. Em outras palavras, para pular, cada pessoa vai fazer uma determinada força dependendo da sua idade, altura e peso. A idéia é que cada objeto seja responsável por seus dados (estado) e seja capaz de realizar as próprias operações que lhe foram atribuídas (comportamento). 7

Mensagem Um objeto por si só não significa muito em um sistema. Para ter algum sentido e valor esses objetos precisam interagir e comunicar-se entre si. Os objetos se comunicam por meio de mensagens. Uma mensagem é uma solicitação feita por um objeto A a um objeto B; Se A envia uma mensagem para B, podemos entender como o objeto A executando um método do objeto B. Como resultado desta solicitação, o objeto B irá modificar seu estado ou irá retornar algum valor; 8

Mensagem As mensagens são compostas por três partes: o Objeto a quem a mensagem é endereçada o Nome do método a ser chamado o Parâmetros que o método recebe 9

Métodos Os métodos especificam a maneira pela qual os dados de um objeto são manipulados (comportamento) Uma especificação dos passos pelos quais uma operação deve ser executada. Ele é uma implementação de uma operação. Diferentes métodos podem ser usados para executar a mesma operação. Os métodos de um tipo de objeto referenciam somente as estruturas de dados desse tipo de objeto. A ação que um objeto ou uma classe podem desempenhar. Os métodos são similares às funções e procedimentos da programação estruturada. 10

Operações Uma operação denota um serviço de uma classe que oferece a seus clientes. Na prática, o cliente normalmente faz cinco tipos de operações sobre um objeto. Os três tipos mais comuns de operações são as seguintes: o Modificador: uma operação que altera o estado de um objeto; o Seletor: uma operação que acessa o estado de um objeto, mas não altera o estado; o Iterator: uma operação que permite que todas as partes de um objeto sejam acessadas em qualquer ordem bem definida. 11

Operações Dois outros tipos de operações são comuns, pois eles representam a infra-estrutura necessária para criar e destruir instâncias de uma classe. o Construtor: uma operação que cria um objeto e / ou inicializa seu estado; o Destruidor: uma operação que libera o estado de um objeto e / ou destrói o próprio objeto. 12

Atributos Atributos definem os dados enquanto os métodos definem a funcionalidade. Atributos são definidos por seus nomes e tipos (por exemplo, integer, string, date). Métodos são definidos escrevendo o código 13

Exemplos de modelos Modelos são representações simplificadas de objetos, itens, tarefas, processos, conceitos, idéias, etc... Os modelos são aqui descritos usando pseudo código em português. O pseudocódigo é somente uma ferramenta prática para expressão dos modelos de forma concisa e formal mas sem entrar nos detalhes de implementação de classes em Java.

Modelo: Conta bancária simplificada O modelo aqui descrito representa uma conta bancária simplificada, que somente representa o nome do correntista, o saldo e se a conta é especial ou não. Aspectos práticos encontrados em contas de bancos reais (senhas, taxas, impostos, etc...) foram deixados de lado em nome da simplicidade. A figura a seguir mostra os dados e as operações deste modelo. E o modelo exibido em pseudocódigo é exibido a seguir.

Modelo: Conta bancária simplificada Dados e atributos do modelo

Modelo: Conta bancária simplificada Modelo conta bancária em pseudocódigo

Modelo: Conta bancária simplificada Modelo conta bancária em pseudocódigo (cont)

Modelo: Conta bancária simplificada Modelo conta bancária em pseudocódigo (cont)

Modelo: Data O modelo aqui descrito será utilizado para representar uma data, podendo ser dadas de eventos, aniversários, etc... que deve conter dados para representar o dia, o mês e o ano. Para este modelo, supomos que o valor do mês é representado por um número inteiro entre 1 e 12, inclusive (em vez de ser representando pelo nome em extenso do mês, por exemplo). Considerando que existem datas válidas e não válidas, implementamos também operações para identificar e distinguir datas válidas e não válidas.

Modelo: Data Dados e atributos do modelo

Modelo: Data Modelo data em pseudocódigo

Modelo: Data Modelo data em pseudocódigo (cont)

Modelo: Data Vantagens do encapsulamento A restrição aos valores que podem ser representados pelos dados: datas não-válidas são identificadas e os valores dos dados dia, mês e ano são inicializados correspondentemente, de forma que se a data passada não for válida, os dados sempre irão valer zero. Dados a serem representados pelo modelo Data não podem assumir qualquer valor É desejável que estes dados sejam manipuláveis somente pelas operações do modelo. Desta forma, ou os dados encapsulados contém uma data válida ou todos contém zero - não é possível ter o dia e o ano corretos e o mês incorreto. A operação inicializadata recebe argumentos, e usa os valores passados como argumentos para efetuar alguma operação, neste caso, manipulação dos dados do modelo. Se não fosse possível passar argumentos para a operação, não teríamos como inicializar os dados do modelo.

Modelo: Data É possível chamar operações de dentro de operações Quando a operação dataéválida é chamada, o seu resultado é verificado e parte da operação inicializadata é executada dependendo do resultado. Os argumentos passados para a operação dataéválida são os mesmos passados para a operação inicializadata - a operação inicializadata delegou a verificação de validade à operação dataéválida. Desta forma, quando o modelo for usado, poderemos inicializar uma data diretamente ou verificar se ela é válida sem precisar inicializar.

Classes, objetos, instâncias, referências e métodos Programadores que utilizam o paradigma de programação orientada a objetos criam e usam objetos a partir de classes, que estão relacionadas diretamente com os modelos descritos anteriormente Os conceitos de classe e um objeto estão intimamente entrelaçados, pois não podemos falar de um objeto sem levar em conta a sua classe. No entanto, existem diferenças importantes entre esses dois termos. Considerando que um objeto é uma entidade que existe no tempo e no espaço, uma classe representa apenas uma abstração, a "essência" de um objeto. 26

Classes, objetos, instâncias, referências e métodos Uma classe é um conjunto de objetos que compartilham uma estrutura comum, comportamento comum, e semântica comum. Um único objeto é simplesmente uma instância de uma classe. As classes são tipos que podem ser criados. Classes são estruturas das linguagens de programação orientadas a objetos para conter para determinado modelo, os dados que devem ser representados e as operações que devem ser efetuadas com estes dados. Assim, uma classe representa um conjunto de objetos que compartilham uma estrutura comum e um comportamento comum. 27

Classes, objetos, instâncias, referências e métodos Classes são escritas com os recursos e regras da linguagem de programação orientada a objetos para a implementação dos modelos. Em algumas situações as classes são somente moldes ou formas que representam os modelos abstratamente. Os dados contidos em uma classe são conhecidos como campos ou atributos As operações contidas em uma classe são chamadas de métodos dessa classe. O processamento de dados que deve ser feito para um modelo será feito dentro dos métodos, que eventualmente poderão executar outros métodos, da mesma classe a que pertencem ou de outras classes.

Interface e implementação A interface de uma classe fornece seu ponto de vista exterior e, portanto, enfatiza a abstração, escondendo a sua estrutura e os segredos de seu comportamento caixa-preta Consiste basicamente das declarações de todas os métodos aplicáveis a instâncias da classe, mas pode também incluir constantes, propriedades necessárias para completar a abstração. Já a implementação de uma classe é a sua visão interna, que engloba os segredos de seu comportamento. A implementação de uma classe consiste basicamente da implementação de todas os métodos (que realizam as operações) definidas na interface da classe. 29

Interface e implementação Podemos ainda dividir a interface de uma classe em quatro partes: o Público: a declaração de que está acessível a todos os clientes; o Protegido: a declaração de que só é acessível para a própria classe e suas subclasses; o Privado: a declaração de que só é acessível para a própria classe; o Pacote: a declaração de que só é acessível por classes no mesmo pacote ou local; Modificador Classe Pacote Subclasse Globalmente Public sim sim sim sim Protected sim sim sim não Sem Modificador (Padrão) (Pacote) sim sim sim (dentro do pacote) não (fora do pacote) Private sim não não não não 30

Encapsulamento Mecanismo utilizado para disponibilizar métodos que operam sobre os dados e que protegem o acesso direto indevido aos atributos de uma instância fora da classe onde estes foram declarados. Conhecido também como ocultação de informações (information hiding) O encapsulamento protege os dados do objeto do uso arbitrário e não-intencional. 31

Encapsulamento O encapsulamento é o resultado (ou ato) de ocultar do usuário os detalhes da implementação de um objeto. O encapsulamento é importante porque separa a maneira como um objeto se comporta da maneira como ele é implementado. A definição de como implementar os conhecimentos ou ações de uma classe, sem informar como isto é feito. Não utilizar o encapsulamento permite que um objeto B viole a integridade do A, pela modificação direta de seu estado. Modelos que encapsulam os dados possibilitam a criação de programas com menos erros e mais clareza. Encapsulamento de dados em modelos deve ser um dos principais objetivos do programador que use linguagens orientadas a objetos. 32

Encapsulamento: Exemplo Saldo de uma conta bancária O saldo não pode ser alterado ou manipulado diretamente, mas sim através de operações adequadas para isso, como lançamentos de débitos e créditos; A alteração direta do saldo causaria um problema de cálculos e inconsistência e falta de confiabilidade de dados; O encapsulamento permite esconder o saldo e definir que métodos adequados para operar sobre os dados dos objetos daquela classe. O uso de encapsulamento evita ainda, que um programa torne-se tão interdependente que uma pequena mudança tenha grandes efeitos colaterais. 33

Herança Herança é um mecanismo da OO que permite criar novas classes a partir de classes já existentes, aproveitando-se das características existentes na classe a ser estendida. Relacionamento entre itens gerais (chamados de superclasses ou classe-mãe) e tipos mas específicos destes itens (chamados subclasses ou classes-filha). Comumente chamado de relacionamento é um ou é um tipo de Exemplo : aluno-3º-período é um aluno é uma pessoa 34

Herança Classe abstrata Funcionário nome salário Gerente Vendedor Diretor Diretor de vendas Diretor de TI 35

Herança Classe abstrata Uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos. A classe abstrata é sempre uma superclasse que não possui instâncias. Ela define um modelo (template) para uma funcionalidade e fornece uma implementação incompleta - a parte genérica dessa funcionalidade - que é compartilhada por um grupo de classes derivadas. Cada uma das classes derivadas completa a funcionalidade da classe abstrata adicionando um comportamento específico. Uma classe abstrata normalmente possui métodos abstratos. Esses métodos são implementados nas suas classes derivadas concretas com o objetivo de definir o comportamento específico. O método abstrato define apenas a assinatura do método e, portanto, não contém código. 36

Herança Interfaces É um conjunto de especificações de serviços (operações); Um serviço tem especificação e implementação; A especificação define o que faz o serviço (operação); A implementação define como o serviço é feito (método); Uma interface pode ser representada na UML conforme apresentado a seguir: Cadastro ou <<interface>> Cadastro 37

Herança Interfaces Em uma interface todos os serviços possuem apenas especificação (método com apenas assinaturas sem implementação). Impõe especificação do que uma classe deve oferecer e implementar. Uma interface não pode ser instanciada; Interface só possui métodos (exceto construtores). Uma classe implementa uma ou mais interface; Uma classe pode ao mesmo tempo herdar de uma classe e implementar uma interface; 38

Herança Os subtipos, além de herdarem todas as características de seus supertipos, também podem adicionar mais características, seja na forma de variáveis e/ou métodos adicionais, bem como reescrever métodos já existentes na superclasse (polimorfismo). A herança permite vários níveis na hierarquia de classes, podendo criar tantos subtipos quanto necessário, até se chegar no nível de especialização desejado. A herança introduz complexidade, o que não é desejável. Identificar uma hierarquia de herança durante o design põe restrições desnecessárias à implementação, portanto atenção. Use com moderação. 39

Herança Herança múltipla Uma classe pode herdar atributos e operações de várias superclasses Pode levar a conflitos quando atributos e operações de superclasses diferentes tem o mesmo nome e semânticas diferentes Torna a hierarquia de classes mais complexa Livro +autor +edicao +datapublicacao +ISBN GravacaoDeVoz +narrador +duracao +datagravacao LivroEmAudio Fitas +fitas: Fitas[1..*] 40

Polimorfismo Formalmente polimorfismo vem do grego e significa várias formas. No caso da OO, polimorfismo denota uma situação na qual um objeto pode se comportar de maneiras diferentes ao receber uma mensagem, dependendo do seu tipo de criação. O polimorfismo é alcançado com auxílio do uso de herança nas classes e a reescrita (overriding) de métodos das superclasses nas suas subclasses. Duas subclasses de uma mesma classe podem ter implementações completamente diferentes de um mesmo método, o que leva os objetos a se comportarem de forma diferente, dependendo do seu tipo (classe). 41

Polimorfismo Funcionário nome salário Gerente Vendedor Diretor O cálculo do salário do vendedor pode ser diferente do cálculo de salário do diretor de vendas. O método da classe filha se sobrepõe (overrides) à da classe mãe Diretor de vendas Diretor de TI 42

Polimorfismo O polimorfismo nos permite decidir qual dos métodos será usado em tempo de execução. Com sobrecarga (overloading), podemos decidir qual dos métodos será usado em tempo de compilação, distinguindo pelos parâmetros passados. Impressao +imprimir(doc: DOC) +imprimir(pdf: PDF) +imprimir(txt: TXT) +imprimir(ppt: PPT) 43