Programação Orienta a Objetos

Documentos relacionados
Programação Orientada a Objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos JAVA - NETBEANS

Orientação a Objetos AULA 06

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

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

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Programação Orientada a Objetos

Linguagem de Programação II Herança

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

Herança e Propriedades

Classes e Objetos. Sintaxe de classe em Java

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

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

Programação Orientada a Objetos

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

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

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

Notas de Aula 04: Herança e polimorfismo.

Linguagem de Programação III

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

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

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)

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

Unidade: sobrecarga, construtores e herança

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

Linguagem de Programação. Diagrama de classes

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

O PARADIGMA ORIENTADO POR OBJETOS

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Linguagem de programação Programação Orientada a objetos

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

Programação Orientada a Objetos

Programação C# + ASP.NET

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

Visibilidade e Encapsulamento

Classes, Métodos e Propriedades

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

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

Linguagens de Programação Aula 12

Introdução à Análise e Projeto de Sistemas

DIAGRAMAS DE CLASSE UML

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

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Capítulo 2. Orientação a Objetos

[Linguagem de Programação 3] [Aula 01] [Gustavo Yoshio Maruyama]

COMPORTAMENTOS - Observações

Notas de Aula 03: Introdução a Orientação a Objetos e a UML

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

C com introdução a OO

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

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

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

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

Desenvolvimento Web II

POO e C++: Herança e Polimorfismo

Conceitos de Programação Orientada a Objetos

Laboratório de programação II

Programação Orientada a Objetos

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Daniel Wildt

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

Levantamento, Análise e Gestão Requisitos. Aula 03

Polimorfismo. O que é polimorfismo?

Programação Orientada a Objetos

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

Introdução à UML. Prof. Jesus José de Oliveira Neto

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

Fundamentos de Orientação à objetos

Programação orientada a objetos

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Programação Orientada a Objetos

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

Transcrição:

Programação Orienta a Objetos Linguagem de Programação 1 Os atores principais do paradigma de projetos orientados a objetos são chamados de objetos. Um objeto se origina de uma classe, que é uma especificação tanto dos campos de dados, também chamados de variáveis de instância que um objeto contém, como dos métodos (operações) que pode executar. Cada classe apresenta para o mundo exterior uma visão concisa e consistente dos objetos que são instâncias dessa classe, sem detalhes desnecessários ou acesso às estruturas internas dos objetos. Essa abordagem de computação visa atingir diversos objetivos, robustez, adaptabilidade e reusabilidade. Produzir um software correto, que produz as saídas certas para todas as entradas previstas pela aplicação do programa, além de ser um software robusto, ou seja, capaz de lidar com entradas inesperadas que não estão explicitamente definidas pela aplicação. O software deve ser capaz de evoluir ao longo do tempo em resposta a alterações nas condições de seu ambiente. O software tem de ser executado em diferentes plataformas de hardware ou sistemas operacionais, com alterações mínimas. Desenvolver um software de qualidade pode ser um empreendimento caro, podendo seu custo ser diluído caso seja projetado de forma a ser reutilizável em aplicações futuras. Os princípios da abordagem orientada a objetos são: abstração, encapsulamento e modularidade.

2 Herança: Programação Orientada a Objetos A noção de abstração significa decompor um sistema complicado em suas partes fundamentais e descrevê-las em uma linguagem simples e precisa. A descrição das partes de um sistema implica atribuir-lhes um nome e descrever suas funcionalidades. O conceito de encapsulamento estabelece que os diferentes componentes de um sistema de software não devem revelar detalhes de suas respectivas implementações. Uma das maiores vantagens do encapsulamento é que ele oferece ao programador liberdade na implementação dos detalhes do sistema. A única restrição ao programador é manter a interface abstrata que é percebida pelos de fora. A modularidade se refere a uma estrutura de organização na qual os diferentes componentes de um sistema de software são divididos em unidades funcionais separadas. Organização hierárquica A estrutura imposta pela modularidade auxilia a tornar o software reutilizável. Se os módulos do software forem escritos de uma forma abstrata para resolver problemas genéricos, então os módulos podem ser reutilizados quando instâncias do mesmo problema geral surgirem em outros contextos. Uma forma natural de organizar vários componentes estruturais de um pacote de software é de uma forma hierárquica, que agrupa definições abstratas similares juntas nível a nível, partindo do mais específico para o mais genérico, à medida que se percorre a hierarquia. Padrões de projeto O projeto orientado a objetos facilita o desenvolvimento de software reusável, robusto e adaptável. O conceito de padrão de projeto descreve uma solução para um determinado problema de projeto de software típico. Um padrão provê um esquema genérico de uma solução que pode ser aplicada em muitas situações diferentes. Descreve os elementos principais da solução de forma abstrata que pode ser especializada para o problema específico que se apresenta. Existe dois grupos de padrões: padrões para resolver problemas de projeto de algoritmos e padrões para resolver problemas de engenharia de software. Alguns dos padrões para projeto de algoritmos incluem: recursão, amortização, divisão e conquista, poda e busca (diminuição e conquista), força bruta, método guloso e programação dinâmica. Herança É uma forma de reutilização de software na qual uma nova classe é criada, absorvendo membros de uma classe existente e aprimorada com capacidades novas ou modificadas. Com a herança os programadores economizam tempo durante o desenvolvimento de programa reutilizando software de alta qualidade testado e depurado. Ao criar uma classe o programador pode designar que a nova classe deverá herdar membros de uma classe existente. Esta classe existente é chamada de superclasse, e a nova classe, de subclasse. Cada subclasse pode tornar-se a superclasse para futuras subclasses.

Linguagem de Programação 3 Superclasses e subclasses Os relacionamentos de herança forma estruturas hierárquicas do tipo árvore. Uma superclasse existe em um relacionamento hierárquico com suas subclasses. É possível tratar objetos de superclasse e objetos de subclasse de maneira semelhante. Os objetos de todas as classes que herdam uma superclasse comum podem ser tratados como objetos dessa superclasse. Entretanto, os objetos de superclasse não podem ser tratados como objetos de suas subclasses. Um problema com herança é que uma subclasse pode herdar métodos que ela não necessita ou que não deveria ter. Mesmo quando um método de superclasse é adequado a uma subclasse, essa subclasse precisa frequentemente de uma versão personalizada do método. A subclasse pode sobrescrever (redefinir) o método de superclasse com uma implementação adequada. Membros protected Utilizar acesso protected oferece um nível intermediário de acesso entre public e private. Os membros protected de uma superclasse podem ser acessados por membros dessa superclasse, por membros de usas subclasses e por membros de outras classes no mesmo pacote. Todos os membros de superclasse public e protected retêm seu modificador de acesso original quando se tornam membros da subclasse. Os métodos de subclasse podem referir-se a membros public e protected herdados da superclasse utilizando os nomes de membro. Quando um método de subclasse sobrescrever um método de superclasse, o método de superclasse pode ser acessado a partir da subclasse precedendo o nome de método de superclasse com a palavra chave super e um separador de ponto (.). Relacionamento entre superclasses e subclasses Em uma empresa, os empregados comissionados (representados como objetos de uma superclasse) recebem uma porcentagem de suas vendas, enquanto empregados comissionados com salário-base (representados como objetos de uma subclasse) recebem um salário-base mais uma porcentagem de suas vendas. 1. Declarar a classe ComissaoEmpregado, que herda diretamente da classe Object e declara como variáveis de instância private o nome, sobrenome, CPF, taxa de comissão e quantidade de venda bruta (total). A linha 1 inicia a declaração de classe e indida que ComissaoEmpregado extends, isto é, herda a classe Object do pacote java.lang. A classe ComissaoEmpregado os métodos da classe Objeto. A classe Object não tem nenhum

4 Herança: Programação Orientada a Objetos campo. Se uma classe não especificar que ela herda outra classe, a nova classe herda Object implicitamente. A linha 2 a 6 declara as variáveis de instância de classe. Cada uma de suas variáveis de instância foi declarada como private, então os objetos de outras classes não podem acessar essas variáveis diretamente. Os serviços public da classe ComissaoEmpregado incluem um construtor (linhas 8 a 15) e os métodos ganhos (linhas 57 a 59) que calcula os lucros e tostring (linhas 61 a 67) que retorna a representação String do objeto ComissaoEmpregado. As linhas 17 a 46 declaram os métodos públic get e set para manipular as variáveis de instância de classe (nome, sobrenome, cpf, vendas e comissão). A classe ComissaoEmpregado declara cada uma de suas variáveis de instância como private, então os objetos de outras classes não podem acessar essas variáveis diretamente. Os métodos setvendabruta e setcomissao, por exemplo, validam seus argumentos antes de atribuir os valores às variáveis de instância vendas e comissão, respectivamente. A classe TesteComissaoEmpregado testa a classe ComissaoEmpregado. As linhas 3 e 4 instanciam um objeto ComissaoEmpregado e invocam o construtor de ComissaoEmpregado (linhas 5 a 16). Os métodos get de ComissaoEmpregado recuperam os valores das variáveis de instância do objeto para a saída. As linhas 17 e 18 invocam os métodos setvendabruta e setcomissao do objeto para alterar os valores das variáveis de instância vendas e comissão. As linhas 19 a 21 geram a saída da representação de string de ComissaoEmpregado atualizada.

Linguagem de Programação 5 Classe que testa a classe ComissaoEmpregado.

6 Herança: Programação Orientada a Objetos 2. Declarar a classe BaseMaisComissaoEmpregado, que herda da classe Object e declara como variáveis de instância private nome, sobrenome, CPF, taxa de comissão, quantidade bruta de vendas e salário-base. a. Criar a classe BaseMaisComissaoEmpregado sem utilizar herança. A classe BaseMaisComissaoEmpregado contém nome, sobrenome, CPF, quantidade de vendas brutas, taxa de comissão e salário base. A classe BaseMaisComissaoEmpregado representa um empregado que recebe um salário base além da comissão. Os serviços public BaseMaisComissaoEmpregado incluem um construtor BaseMaisComissaoEmpregado entre as linhas 9 e 17. Um construtor de seis argumentos. As linhas 19 a 54 declaram os métodos public get e set para as variáveis de instância private da classe, que foram declaradas nas linhas 2 a 7.

Linguagem de Programação 7 As linhas 56 a 58 apresenta o método ganhos que calcula os lucros de um empregado comissionado com salário base e as linhas 60 a 68 apresenta o método tostring para retornar uma String contento informações de BaseMaisComissaoEmpregado. Essas variáveis e métodos encapsulam todos os recursos necessários de um empregado comissionado com salário base.

8 Herança: Programação Orientada a Objetos A classe TesteBaseMaisComissaoEmpregado instanciam um objeto BaseMaisComissaoEmpregado. As linhas 7 a 18 utilizam os métodos get para recuper os valores das variáveis de instância do objeto para saída. A linha 20 invoca o método setsalariobase do objeto para alterar o salário base. As linhas 22 a 25 invocam o método tostring do objeto explicitamente para obter a representação de string do objeto. b. Criar uma hierarquia de herança ComissaoEmpregado- BaseMaisComissaoEmpregado com variáveis de instância protected. Para permitir que a classe BaseMaisComissaoEmpregado acesse diretamente as variáveis de instância de superclasse primeironome, ultimonome, numerocpf, vendasbrutas e porcentagemcomissao, você pode declarar esses membros como protected na superclasse. Os membros protected de uma superclasse são herdados por todas as subclasses dessa superclasse.

Linguagem de Programação 9 As linhas 2 a 6 da classe declara as variáveis de instância como protected em vez de private. Acima um construtor de cinco argumentos.

10 Herança: Programação Orientada a Objetos Os métodos get e set para obter e retornar os valores das variávies de instância. O método que calcula os lucros do empregado. O método que retorna as informações dos conteúdos das variáveis e dos lucros obtidos.

Linguagem de Programação 11 A classe BaseMaisComissaoEmpregado3 herda ComissaoEmpregado2. A classe BaseMaisComissaoEmpregado3 não herda o construtor da classe ComissaoEmpregado2. Entretanto, o construtor de seis argumentos da classe BaseMais ComissaoEmpregado3 chama explicitamente o construtor de cinco argumentos da classe ComissaoEmpregado2. A classe BaseMaisComissaoEmpregado3 herda a maior parte de sua funcionalidade da classe ComissaoEmpregado2. A classe TesteBaseMaisComissaoEmpregado3 testa a classe BaseMaisComissao Empregado3.

12 Herança: Programação Orientada a Objetos 3. Herança da classe Progressao e suas subclasses. A figura acima apresenta o diagrama para visualizar a maneira pela qual as três diferentes progressões (aritmética, geométrica e de Fibonacci) são derivadas da classe genérica Progressao. Uma progressão numérica é uma sequência de números em que o valor de cada um depende de um ou mais valores anteriores. A classe Progressao estabelece os campos e métodos genéricos de uma progressão numérica. O primeiro valor da progressão e o valor atual da progressão, bem como três métodos. O método primeirovalor() que retorna a progressão ao primeiro valor e retorna esse valor. O método proxvalor() que avança a progressão para o próximo valor e retorna esse valor.

Linguagem de Programação 13 O método impremeprogressao que retorna a progressão para o início e imprime os primeitos n valores da progressão. Uma progressão aritmética determina o próximo número por meio de adições. A classe ProgressaoAritmetica herda os campos primeiro e atual, bem como os métodos primeirovalor() e imprimeprogressao() da classe Progressao. Adiciona um novo campo, inc, para armazenar o incremento, e dois construtores para inicializá-lo. Subscreve o método proxvalor() para adequá-lo à forma pela qual será obtido o próximo termo de uma progressão aritmética. O construtor default chama o método parametrizado usando a palavra reservada this e passando 1 como valor do parâmetro a ser usado como incremento. Uma progressão geométrica determina o próximo número por meio de multiplicações. A classe ProgressaoGeometrica é declarada como subclasse da classe Progressao, e herda os campos primeiro e atual, e os métodos primeirovalor, impremeprogressao da classe Progressao.

14 Herança: Programação Orientada a Objetos Na progressão de Fibonacci o próximo valor é definido pela soma dos valores atuais com os anteriores. A classe ProgressaoFibonacci oferece uma forma diferente de iniciar a progressão. A classe TestarProgressao executa um teste simples com cada uma das três classe.

Linguagem de Programação 15 O resultado do teste. Exercícios Escreva uma hierarquia de herança para as classes Quadrilátero, Trapézio, Paralelogramo, Retângulo e Quadrado. Utilize Quadrilateral como superclasse da hierarquia. Escreva um programa que instancia objetos de suas classes e gera saída da área de cada objeto (exceto Quadrilátero).