15
Linguagem de Programação 1 http://erinaldosn.wordpress.com Programação Orienta a Objetos 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.

Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Embed Size (px)

Citation preview

Page 1: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 1

http://erinaldosn.wordpress.com

Programação Orienta a Objetos

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.

Page 2: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

2 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 3: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 3

http://erinaldosn.wordpress.com

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

Page 4: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

4 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 5: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 5

http://erinaldosn.wordpress.com

Classe que testa a classe ComissaoEmpregado.

Page 6: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

6 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 7: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 7

http://erinaldosn.wordpress.com

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.

Page 8: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

8 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 9: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 9

http://erinaldosn.wordpress.com

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.

Page 10: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

10 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 11: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 11

http://erinaldosn.wordpress.com

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.

Page 12: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

12 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 13: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 13

http://erinaldosn.wordpress.com

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.

Page 14: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

14 – Herança: Programação Orientada a Objetos

http://erinaldosn.wordpress.com

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.

Page 15: Programação Orienta a Objetos - Profº Erinaldo Sanches ... · PDF fileUm objeto se origina de uma classe, ... Os princípios da abordagem orientada a objetos são: ... fundamentais

Linguagem de Programação – 15

http://erinaldosn.wordpress.com

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