Programação Orientada a Objetos

Slides:



Advertisements
Apresentações semelhantes
Desenvolvimento de aplicativos Orientados a Objetos: Definição e Características THIAGO IDEALI.
Advertisements

Paulo Marques Hernâni Pedroso
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Prof. Thiago Pereira Rique
Orientação a Objetos Introdução. Objetos: o que são? Olhando o mundo real pode-se ver vários objetos: mesa, cadeiras, alunos, professores etc. Esses objetos.
Iniciação ao Java – Márcio F. Campos
O Paradigma de Orientação a Objetos
Introdução ao paradigma de programação: Orientado a Objetos
Diagrama de Classes.
Linguagem de Programação II
Programação Orientada a Objetos
UMA ABORDAGEM SOBRE ORIENTAÇÃO A OBJETOS!
Classes e objetos P. O. O. Prof. Grace.
TÉCNICAS DE PROGRAMAÇÃO II
Curso de extensão em Desenvolvimento Web
JAVA: Conceitos Iniciais
Princípios de Orientação à Objetos
Programação Orientada a Objetos com Java
CAPACITAÇÃO SME-SP.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Conceitos básicos de orientação a objetos
Introdução a Java: Classes, métodos e variáveis Eduardo Figueiredo 24 de Março de 2010 POOAula 05.
DIAGRAMA DE CLASSE Modelagem de Software
Sobrecarga e Encapsulamento
Treinamento do Microsoft® Access® 2010
Programação Orientada à Objetos
Laboratório de Programação I
Programação I Aula 2 (Métodos)
Linguagem de Programação JAVA
Classes, Objetos, Atributos e Métodos JAVA
07/04/2017 Linux Ubuntu 2.
PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof
Orientação a Objetos Parte I
Programação Orientada à Objetos
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
Definição Classe Objeto Construtor de Classes Manipulando o objeto Namespace Utilização do namespace Herança Polimorfismo Encapsulamento Propriedades.
Análise e Projeto de Sistemas
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
SISTEMAS DISTRIBUIDOS Aula 4
Programação Orientada à Objetos
Programação Orientada a Objetos - Java
Implementação Orientada a Objetos – Aula 03
Tutorial: Cadastro.
Programação Orientada à Objetos
Prof. Gilberto Irajá Müller
Aula Prática 4 Monitoria IP/CC (~if669).
Classes Abstratas e Interface
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos Professor: Cheli Mendes Costa Introdução a Programação Orientada.
Bruno Inojosa MCP .NET Framework
Orientação a Objetos Programação Estruturada e Orientada a Objetos
Introdução a Programação Orientada a Objetos
Solicitar o seu nome de usuário e senha pela sua ADO Envie um para sua ADO (sua organização de custódia) pelo endereço de que você registrou.
Introdução a Orientação a Objetos
Herança.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
20/04/2017 Orientação a Objetos 1 1.
Módulo II Capítulo 1: Orientação a Objetos
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
Programação para Web I AULA 2 BANCO DE DADOS.
JavaScript Introdução ao JavaScript 1. Objetivos Introdução Sintaxe Básica Arquivo (script) externo Script no HEAD da página Script no BODY da página.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)
Questionário (Básico) Autor: Skyup Informática. Atividade - Questionário O módulo permite criar uma série de questões, que deverão ser respondida pelos.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Programação Orientada a Objetos JAVA - NETBEANS

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento

Programação Orientada a Objetos (POO) A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que usa os conceitos de Objetos e Classes como elementos centrais para representar e processar dados usados nos programas. Você sabe o que um Paradigma? Segundo o dicionário Houaiss, paradigma significa modelo, padrão, exemplo.  

Programação Orientada a Objetos (POO) Os conceitos da programação orientada a objetos (POO) surgiram no final da década de 1960, com a linguagem Simula-68. Posteriormente amadurecidos e aprimorados durante a década de 1970 pela linguagem de programação Smalltalk. A popularização da POO só se deu ao longo da década de 80 e 90, com as linguagens C++ e Java.

Programação Orientada a Objetos (POO) Um dos principais pesquisadores que introduziu os conceitos de POO, foi o cientista Alan Kay da Xerox, um dos criadores da linguagem Smalltalk. Durante suas pesquisas, Alan desenvolveu a ideia de que poderíamos construir um programa usando conceitos e abstrações do mundo real, como objetos, troca de mensagens.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento

Conceitos da Programação Orientada a Objetos A Programação Orientada a Objetos está sedimentada sobre quatro pilares derivados do princípio da abstração, são eles: Encapsulamento, Herança, Composição e Polimorfismo.

Conceitos da Programação Orientada a Objetos O princípio da abstração é a capacidade de abstrair a complexidade de um sistema e se concentrar em apenas partes desse sistema. Exemplo: um médico torna-se um especialista em algum órgão do corpo (exemplo, o coração). Ele abstrai sem desconsiderar as influências dos outros órgãos e foca apenas sua atenção nesse órgão.

Objetos Na programação OO, objetos são usados para representar entidades do mundo real ou computacional. Se observarmos ao nosso redor, veremos várias entidades ou abstrações as quais podem ser representadas como objetos no nosso programa. As pessoas e seus carros podem ser vistas como objetos. 

Objetos Os objetos possuem: Características pelas quais os identificamos e Finalidades para as quais os utilizamos.

Objetos: Atributos Características são tipicamente chamadas de atributos. O objeto Pessoa possui RG, nome, data de nascimento, etc. O objeto Carro possui tipo, cor, quantidade de portas.

Objetos: Métodos Objetos podem também ter comportamentos associados. Um objeto do tipo Pessoa pode andar, correr ou dirigir carros. Um objeto do tipo Carro pode ligar, desligar, acelerar, frear.

Objetos Na POO os objetos possuem características e comportamentos. As características também podem ser chamadas de dados ou atributos. Enquanto os comportamentos também podem ser chamados de operações ou métodos.

Objetos

Classes Carros sempre possuirão os atributos tipo, cor e número de portas. Pessoas sempre possuirão nome, data de nascimento e, possivelmente, um RG.

Classes A modelagem e programação de um conjunto de objetos que possuem características (atributos) e comportamentos (métodos) comuns é feita na POO usando o conceito de Classe. Cada classe funciona no fundo como um molde para a criação de um dado objeto. Os objetos são vistos como representações concretas (instâncias) das classes. 

Classes A classe define que objetos devem ter tipo, cor, placa e número de portas, mas não indica explicitamente quais são seus valores.

Classes Dois diferentes carros foram criados tomando como base a estrutura da classe.

Criação de Classes A classe não serve para organizar no sentido de guardar os objetos, ela serve de modelo de construção. A classe é o modelo ou molde de construção de objetos. O modelo define as características e comportamentos que os objetos irão possuir. A classe é abstrata (não existe concretamente).

Criação de Classes Vamos criar a classe Carro em Java. Crie um nome Projeto chamado de POO. Adicione uma nova classe java denominada Carro, clicando com o botão direito do mouse em cima do pacote poo. Palavra obrigatória para indicar a criação de uma classe. Nome da classe escolhido pelo programador. Por padrão, utiliza-se sempre a primeira letra maiúscula. Conjunto de características dos objetos da Classe Carro.

Criação de Classes Perceba que não inserimos no código nada sobre o comportamento dos carros, como andar para frente ou para trás, virar a esquerda/direita, frear etc. Vamos criar a classe Pessoa em Java. Adicione uma nova classe java denominada Pessoa, clicando com o botão direito do mouse em cima do pacote poo.

Adicionando Comportamento Os objetos das classes Carro e Pessoa, precisam não só de suas características, mas também de ações possíveis de serem executadas. Um carro precisa oferecer funções para que as pessoas os manobrem. E pessoas, por sua vez, precisam desempenhar suas atividades, como andar, correr, estudar etc.

Adicionando Comportamento Observe que adicionamos novas linhas ao código, agora com dois métodos setCor(String cor) e getCor(). Esses métodos servem, respectivamente, para alterar o valor do atributo “cor” e retornar o valor desse atributo.

Adicionando Comportamento

Adicionando Comportamento

Atividade Faça o mesmo para a classe Pessoa.

Criando um Objeto Vá para o programa principal, onde existe o método main.

Criando um Objeto Vamos criar um objeto da classe Carro, no mundo da programação orientada a objetos chamamos isso de instanciação, ou seja, criaremos uma instância da classe Carro. Um objeto ou instância é criado através do operador new.

Criando um Objeto Toda a manipulação e consulta dos atributos do objeto serão feitas através de sua referência, ou seja, da variável. Define-se os atributos do carro utilizando os métodos da classe Carro. Utiliza-se o conjunto de métodos setAtributo(valor).

Criando um Objeto Exibindo cada atributo com seu respectivo método getAtributo().

Criando um Objeto - MAIN

Atividades Instancie um objeto da classe Pessoa. Atribuia aos métodos set’s seus valores. Imprima os valores através dos métodos get’s.

Métodos Construtores E se eu quiser, no momento da criação do objeto, passar valores para alguns de seus atributos, como placa e cor, por exemplo? É possível? É sim!! Para isso, define-se um tipo especial de método chamado construtor. E como seu próprio nome diz, ele constrói e objeto e nesse instante pode definir quaisquer atributos que desejarmos.

Métodos Construtores O método construtor é aquele chamado em um objeto, quando ele é criado.  new Carro(); Se a classe não tiver método construtor? O objeto ainda pode ser criado usando a instrução new. Definindo os construtores, pode-se estabelecer valores iniciais para os atributos do objeto.

Métodos Construtores Após os atributos da classe Carro, adicione o construtor abaixo. Observe que esse método possui o mesmo nome da Classe Carro e não possui tipo de retorno.

Métodos Construtores Existem duas maneiras de se construir um objeto derivado da classe Carro, ou do tipo Carro: Com ou Sem inicialização dos valores dos atributos.

Métodos Construtores Observe na classe Main.java as duas formas de construir objetos: As formas de acessos são as mesmas usando os métodos get’s. Os métodos set’s também funcionam para alterar os atributos em qualquer um dos casos.

Atividades Crie os construtores da classe Pessoa. Instancie dois objetos, cada um com um construtor diferente. Acesse os dois objetos, imprimindo seus valores.

Troca de Mensagens Os objetos estão relacionados a outros, pois nenhum faz tudo sozinho, nem mesmo meu computador de última geração, pois sem a tomada na parede ele não é nada. Os objetos precisam se “comunicar”, ou seja, um objeto aciona um método de outro. Essa comunicação é realizada através do mecanismo de troca de mensagem.

Troca de Mensagens Vejamos outro exemplo: Esse código escrito dentro da classe Main envia uma mensagem para definir um atributo e outra para recuperar a placa do carro. Em Java, a troca de mensagem representa: A mudança ou leitura do estado interno do objeto através da alteração de um de seus atributos; ou A chamada a um dos métodos do objeto que representam seu comportamento e as tarefas que são capazes de desempenhar.

Troca de Mensagens Bem, quando relacionamos coisas no mundo real fazemos isso de forma natural e espontânea. Vejamos, quantas pessoas cabem em um automóvel? Na maioria deles, a lotação é de no máximo 5 pessoas, incluindo seu condutor. Mas uma pessoa pode estar em quantos automóveis ao mesmo tempo? Até onde as leis da física permitem, só em um, de cada vez! Chamamos esse relacionamento de um-para-muitos, um (automóvel) para muitos (pessoas). Em outras situações, vemos que um marido é para uma, e somente uma, esposa, e a recíproca é verdadeira, temos então um relacionamento um- para-um. A outra combinação possível seria muitos-para-muitos, no exemplo computador e impressora, o computador pode imprimir em várias impressoras e cada uma dessas podem receber documentos dos outros computadores do escritório.

Troca de Mensagens Vamos ligar a classe Carro à classe Pessoa, fazendo com que uma pessoa possua um carro e esse carro só possa pertencer a uma única pessoa. É o que chamados de relação um-para-um. A classe Carro precisa “saber que pertence” a alguém. Iremos adicionar um atributo chamado dono, que é do tipo Pessoa.

Troca de Mensagens E os respectivos métodos get e set:

Troca de Mensagens Vamos utilizar esse relacionamento no exemplo seguinte:

Trabalho Faça um sistema de Biblioteca Livros Usuários: Empréstimos: Atributos: Título, Autores, Área, Editora, Ano, Edição, Número de Folhas. Métodos: set’s e get’s Usuários: Atributos: Nome, Idade, Sexo, Telefone. Empréstimos: Atributos: Data do Empréstimo, Hora do Empréstimo, Livro(Relacionamento) e Usuário (relacionamento) Insira os objetos do programa principal e imprima o empréstimo. Não se esquece do construtor.

Troca de Mensagens Os sistemas OO precisam de métodos mais complexos, que verifiquem a validade dos dados, realizem atualizações em outras entidades, pesquisem em banco de dados, escrevam em arquivos de log, atualizem objetos da interface etc. Colocando um pouco de complexidade do mundo real no programa?! Adicionar os métodos ligar(), desligar(), acelerar(), frear() à classe Carro.

Troca de Mensagens

Troca de Mensagens Adicione à classe Carro, ainda, um atributo câmbio que indicará qual a “marcha” que o carro está em um dado momento, para tanto, tal atributo irá guardar um valor inteiro de 0 (zero) a 5 (cinco). 0 – neutro (ponto morto) 1 a 5 – marchas

Troca de Mensagens Colocar uma referência do automóvel dentro da classe Pessoa.

Troca de Mensagens Adicione outros métodos à classe Pessoa para interagir (trocar mensagens) com seu carro.

Troca de Mensagens Vamos ao Main! Nosso programa precisa:

Troca de Mensagens

Troca de Mensagens O que podemos ver é que o método Main envia uma mensagem para o objeto Pessoa, que, por sua vez, manda ou repassa essa mensagem para seu objeto da classe Carro, que executa a ação final desejada, que consiste em guiá-lo.

Continuação do Trabalho Adicione na classe Livro: Um atributo booleano denominado emprestimo. Crie os métodos is e set para este atributo. No construtor da classe, atribua o valor false para o atributo acima. Crie os métodos abrir e fechar livro, escrevendo uma mensagem que o livro está aberto ou fechado para leitura. Adicione na classe Usuário: Um método lerLivro(), do qual enviará uma mensagem na tela dizendo o usuário está lendo o livro. Adicione na classe Emprestimo: Um método denominado devolverLivro, do qual fará com que o atributo emprestimo da classe livro seja true, e escreva uma mensagem na tela de livro devolvido. Adicione na classe principal: Acesse os métodos criados acima (abrir, ler, fechar e devolverLivro) através da classe Empréstimo.

Continuação do Trabalho Saída

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento

Encapsulamento Encapsulamento se deriva de cápsula que nos lembra qualquer forma pequena que protege algo em seu interior, como um medicamento,. O encapsulamento, ajuda a desenvolver programas com maior qualidade e flexibilidade para mudanças futuras.

Encapsulamento Encapsulamento é a característica da OO capaz de ocultar partes (dados e detalhes) de implementação interna de classes do mundo exterior.

Encapsulamento Graças ao encapsulamento, podemos ver as classes apenas pelos serviços (métodos) que elas devem oferecer para quem as utiliza. Não visualizamos, nesse caso, de que forma (como) o serviço (método) está implementado internamente na classe. No fundo, o encapsulamento da classe acaba definindo um contrato que determina o que o mundo exterior pode fazer com objetos daquela classe.

Encapsulamento Na Figura, podemos ver que um objeto que possui a característica de encapsulamento fica protegido por uma cápsula. Essa cápsula, que chamamos de interface, serve para ocultar e proteger de outros objetos, os detalhes de implementação daquele objeto. Dessa maneira, o objeto só disponibiliza, através da interface, as funcionalidades que ele deseja receber através de solicitações de outros objetos.

Encapsulamento Exemplo: Objeto Automóvel disponibiliza para um objeto Pessoa a direção como parte da sua interface. Através da direção, a Pessoa solicita ao Automóvel esse serviço, sem saber COMO serão feitos ou estão implementados. Apenas o Automóvel sabe que mecanismos serão acionados para atender a solicitação da Pessoa.

Encapsulamento Nesse caso, aplica-se a característica de encapsulamento ao objeto Automóvel, pois oculta-se do objeto Pessoa os detalhes da implementação dos serviços oferecidos pelo Automóvel. Como isso acontece na prática? Por meio dos Modificadores de Acesso da linguagem Java.  

Encapsulamento Modificadores de Acesso: Os Modificadores de Acesso são palavras chave ou reservadas da linguagem Java cuja utilidade é permitir ou proibir o acesso aos atributos e/ou métodos das classes. public: o atributo ou método pode ser acessado por qualquer outra classe. private: o atributo ou método pode ser acessado apenas por métodos da mesma classe. protected : funciona como o private exceto que as classes filhas ou derivadas também terão acesso ao atributo ou método. Package ou Friendly: Os atributos e métodos são chamados de Package ou Friendly, quando não possuem modificadores, ou seja, são os atributos e métodos declarados sem modificadores. Isso significa que podem ser acessados por todas as classes pertencentes a um mesmo pacote.

Encapsulamento Exemplo: Crie um novo projeto denominado Agenda. Agenda: guardar uma data e uma anotação importante a ser lembrada. Crie um novo projeto denominado Agenda. Não crie a classe principal Clique com o botão direito do mouse em cima do Pacote Padrão e adicione um nova classe Java denominada Agenda. Adicione o código:

Encapsulamento Crie um método “anote” que anotará a descrição do dia.

Encapsulamento É importante também verificar se a data da anotação é uma data válida. Se for uma data válida registra-se a anotação, caso contrário a anotação recebe uma informação de data inválida

Encapsulamento Onde está o encapsulamento? Calma! O objetivo desse exemplo é mostrar a fragilidade do código que não usa o encapsulamento.

Encapsulamento Para isso, criaremos dois objetos com a classe Agenda: agenda1 e agenda2. agenda1 – uma anotação com uma data válida, e agenda2 – uma data inválida. Finalmente, consultaremos os dados dos atributos de cada objeto, em especial a anotação que foi registrada, utilizando o método mostraAnotacao().

Encapsulamento Clique com o botão direito do mouse em cima do Pacote Padrão e adicione um nova classe Java denominada Main. Adicione o método main para que possamos executar a aplicação:

Encapsulamento Adicione o código abaixo para testarmos a fragilidade do código que não usa o encapsulamento. Resultado:

Encapsulamento Veja o que acontece se fizéssemos uma pequena modificação no método main(). Adicione o código: Resultado:

Encapsulamento Veja que sua Agenda permitiu que você inserisse uma data inválida para uma anotação. Isso significa que seu código está susceptível a falhas. Qual é a solução? Encapsulamento.

Encapsulamento Codificar em OO usando o encapsulamento nada mais é que aplicar os modificadores de acesso às classes.

Encapsulamento Sem Modificadores de Acesso

Encapsulamento A classe Agenda não usa nenhum dos modificadores de acesso de forma explícita. Implicitamente ela é Package ou Friendly. O modificador de acesso Package permite que classes do mesmo pacote acessem atributos ou métodos que estejam com tal modificador. Considerando que a classe Principal está no mesmo pacote (veja sobre pacotes na classificação de Package), então, ele tem acesso aos atributos e métodos da classe Agenda.

Encapsulamento Quando a classe Principal teve acesso aos atributos da classe Agenda? O método main da classe principal está acessando os atributos, dia, mes, ano e anotacao da classe Agenda. E está modificando informações sem passar pelo teste de validade da data.

Encapsulamento Aplicando o encapsulamento: Private para os atributos e o método validaData(), Public para os métodos anote() e mostraAnotacao().

Encapsulamento Agora, o compilador já não aceita usar os comandos abaixo. Isso causaria erro! Ou seja, os atributos da classe Agenda agora são privados apenas para a uso da própria classe Agenda.

Encapsulamento Com essa modificação, só é possível inserir uma anotação na classe Agenda usando o método anote(). O método anote() garante que a data inserida para a anotação será validada com o método validaData(), que também é privado ao uso apenas da classe Agenda.

Atividades Aborde encapsulamento na classe Carro e Pessoa. Tente acessar os atributos na classe principal. Aborde encapsulamento na classe Emprestimo, Livro e Usuário. Sem consultar o material responda: O que você entende por encapsulamento? Para que serve? E como aplicar? Antes de rever os conceitos, para que servem os modificadores de acesso: public private package Desenvolva um programa: Cria uma classe candidato com nome e a quantidade de votos. Implemente o método para acrescentar voto, onde somará 1 ao atributo quantidade de votos. Implemente o métodos gets e sets. Inclua o encapsulamento de tal forma que a votação só será realizada por meio do método acrescentar voto. Teste o programa, usando o programa principal.

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento Composição

Composição ou Agregação Compor, juntar, reunir, formar, constituir... Essas ações é chamada Composição. Possibilita a reutilização de código e Um objeto mais complexo pode ser composto de partes mais simples.

Composição ou Agregação Composição ou Agregação é um mecanismo de reaproveitamento (reutilização) de classes utilizado pela POO para aumentar a produtividade e a qualidade no desenvolvimento de software.

Composição ou Agregação Reaproveitamento ou reutilização de classes: usar uma ou várias classes para compor outra classe. Aumento de produtividade: não é necessário reescrever código de determinadas classes, se já existe algum classe com atributos e comportamento similar. Composição: é possível também aumentar a qualidade dos sistemas gerados, porque há a possibilidade de reutilizar classes que já foram usadas em outros sistemas, e, portanto, já foram testadas e têm chances de conter menos erros.

Composição ou Agregação Vejamos um exemplo: um carro é um objeto COMPOSTO por vários outros objetos. Ele é composto pelos objetos motor, pneus, direção, faróis etc.

Composição ou Agregação Você pode criar um objeto a partir de vários outros objetos. Veja o computador que você está usando, ele é um objeto composto por outros objetos: teclado, monitor, placa mãe, memória, mouse etc.

Composição ou Agregação Exemplo Prático: Dado uma classe Automóvel que é composta pelas classes Direção e Motor.

Composição ou Agregação Crie um novo projeto denominado Composicao Crie as classes, com os respectivos atributos e métodos: Direcao: Atributos: cor, tamanhoRaio e kitMultimida do tipo booleano; Métodos: get’s, set’s e is; Construtores; Implemente o encapsulamento. Motor: Atributos: potencia, combustivel e chassi; Métodos: get’s, set’s; Automovel Atributos: motor e direcao de acordo com seus respectivos tipo; Main Objetos: Automovel Setar os valores dos atributos Imprimir os valores dos atributos

Observação Construtor Modificadores de Acesso Atribuir valores constantes aos atributos nos construtores das classes Motor e Direcao. Imprimir os valores do atributos após a instaciação do objeto automovel no método main. Modificadores de Acesso Alterar o modificar de acesso dos atributos das classes Automovel, acessá-los no método main.

Atividades Sem consultar o material, responda: O que você entendeu por Composição? Quais são as vantagens de se usar a Composição? Como você omitiria a presença da composição para quem irá criar os objetos das classes que usa a composição? Crie as classes apresentadas no diagrama abaixo e aplique a Composição para a classe Pessoa, que além de possuir um atributo Nome será composta pelas classes Data, Endereço e Contato para os atributos dataNasc, endereco e contato, respectivamente.

Atividades

Agenda Programação Orientada a Objeto (POO) Conceitos sobre POO Pilares da POO Objeto Classe Construtores Troca de Mensagens Encapsulamento Composição Herança

Herança

Herança Herança é o mecanismo que permite a uma classe herdar todos os atributos e métodos de outra classe.

Herança Como exemplo, observe a Figura a seguir.

Herança Considere capacidade como um atributo da classe Transporte, que indica a quantidade de pessoas que o transporte em questão pode transportar. número de rodas como um atributo da classe Terrestre. cor, número de portas e placa como atributos da classe Automóvel. A Figura apresenta um exemplo de Herança, onde: As classes Aquático, Terrestre e Aéreo herdam da classe Transporte. A classe Barco herda da classe Aquático. A classe Automóvel herda de Terrestre. E, finalmente, Avião de Aéreo.

Herança Toda classe que herda de uma outra, acaba herdando também os seus atributos e métodos. Por exemplo: A classe Transporte possui um atributo chamado capacidade.  A classe Aquático, como ela herda de Transporte, pode-se dizer que também possui o atributo capacidade. E Barco, como herda de Aquático, também possui o atributo capacidade.

Herança Usando a mesma lógica, responda: Quantos e quais são os atributos da classe Terrestre? E da classe Automóvel? Respondendo: a classe Terrestre possui dois atributos: capacidade (de Transporte) e número de rodas. A classe Automóvel possui cinco atributos: capacidade (de Transporte), número de rodas (de Terrestre), cor, número de portas e placa.

Herança Quanto mais alta classe na hierarquia, mais ela tende a ser abstrata, ou menos definida, menos atributos e métodos. Isso garante que a classe tenha mais chance de ser reusada por outras classes. Entendeu? Não. Suponha que a classe Transporte, além do atributo capacidade, possuísse também o atributo número de rodas. Nesse caso, não seria interessante nem faria sentido para a classe Aquático herdar os atributos de Transporte.

Especialização e Generalização Especialização e Generalização: O mesmo que mais classes mais Abstratas e Concretas. Na Generalização, há classes mais genéricas e abstratas disponíveis, as quais podem ser usadas para outras descenderem delas. Já a Especialização, há classes que estão numa posição inferior na hierarquia possuem estado e comportamento mais especializados.

Especialização e Generalização Classes em posição inferior como Automóvel, representam especializações de classes em posição superior (Transporte, Terrestre). Classes em posição superior como Transporte, representam generalizações de classes em posições inferiores (Automóvel, Terrestre).

Herança Múltipla e Simples Herança Múltipla: é a capacidade de uma classe possuir mais de uma superclasse e herdar os atributos e métodos de todas as superclasses. Para simular a herança múltipla em Java, usa-se Interfaces. Herança Simples: Cada classe pode ter apenas uma superclasse. Na linguagem Java usa-se a palavra reservada extends para declarar que uma classe é herdeira de outra.

Herança Curiosidades: Todas as classes em Java descende de uma classe, chamada Object. Quando uma classe usa a relação de Herança, essa classe possui um relacionamento chamado “É um”. Exemplo: Automóvel “é um” transporte Terrestre, assim como que Terrestre “é um” Transporte.  

Herança em Java Em Java a palavra-chave extends é usada para indicar que uma dada classe herda de outra. Crie um projeto Java denominado Herança. Crie as classes abaixo.

Herança em Java

Herança em Java

Herança em Java

Herança em Java

Atividade Crie uma classe chamada ExercicioHeranca. Implemente as classes com os métodos Animal CalculadoraSimples (somar, subtrair) float somar(float a, float b); float subtrair(float a, float b); CalculadoraComplexa (raiz) float raiz(float a);

Atividade Das opções abaixo, qual se refere ao conceito de Herança? Herança é a capacidade de reaproveitar outras classes para compor uma nova classe. Herança é a característica da OO de ocultar partes da implementação interna de classes do mundo exterior. Herança é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras. Herança é o mecanismo que permite a uma classe herdar todos os atributos e métodos de outra classe.

Herança II Objetivos Ao final desta aula, você deve ser capaz de: relacionar a herança e o modificador de acesso protected; entender o uso da palavra-chave super no contexto de herança entre classes; saber como funciona a herança para os métodos, durante a execução do programa.

Herança II A Herança e o Protected Tipos de modificadores de acesso: public, private e protected. Esse último, ficou para explicar melhor. O modificador protected determina que apenas as classes filhas de uma determinada classe poderão ter acesso aos atributos e métodos declarados com esse modificador.

Substituição do private pelo pretected Herança II Veja o exemplo abaixo: Substituição do private pelo pretected

Herança II Adicione um método na classe Automóvel. Esse método faz acesso aos atributos protected capacidade e numRodas, definidos nas classes Transporte e Terrestre, respectivamente. Observe que tais atributos são acessados e usados livremente no método imprimeDadosAutomovel().

Herança II

Herança II O programa abaixo mostra uma tentativa frustrada de acesso aos atributos capacidade e numRodas herdados pela classe Automóvel, dentro de um método main().

Herança II Calma! Se não deu erro, tente colocar em pacotes diferentes. Veja os próximos slides.

Herança II O seu não deu erro? Coloque em pacotes diferentes.

Herança II A Herança e o super A palavra super refere-se à classe classe mãe ou super-classe.  Ela é usada nos construtores.

Herança II

Herança II

Herança II O super é usado para chamar o método construtor da classe mãe. Na classe Transporte, como a classe mãe de Transporte é Object, o super não tem parâmetro. Já no construtor da classe Terrestre, o super tem como parâmetro a capacidade exigida no construtor da classe Transporte. Portanto, a chamada a super na classe Terrestre é no fundo a chamada ao construtor de Transporte. Já o construtor da classe Automóvel, o super tem como parâmetros a capacidade e o numRodas exigidos pelo construtor da classe Terrestre.

Herança II No programa principal você pode chamar pelo método construtor das duas formas. Como feito anteriormente Com os valores sendo iniciados ao intanciar o objeto Automovel.

Herança II Um pergunta: será que a Herança também permite o uso de outros métodos diferentes dos get e set para as classes descendentes? A resposta é sim, como vimos anteriormente no método imprimeDadosAutomovel(). Se um método estiver com modificador private, esse método não estará acessível para classes filhas. Se um método for public ou protected, estarão acessíveis para classes filhas.

Atividades Crie um pacote denominado Heranca2. Acrescente as classes utilizando o princípio da Herança, obedecendo à hierarquia da figura abaixo:. Obs: Substitua na figura o tipo Calendar por String Acrescente encapsulamento do tipo protected nos atributos das classes mãe. Acrescente os métodos gets e sets. Acrescente os construtores com a palavra chave super.

Atividades

Atividades Insira os seguintes métodos, para apresentar os valores dos atributos das classes, mostrarChefe() e mostrarAluno(), respectivamente, às classes ChefeDepartamento e Aluno. Para imprimir os atributos, use o método System.out.println() em cada um dos métodos. Crie uma classe TestaTudo com um método main(), que instancia um objeto das classes ChefeDepartamento e Aluno e exibe os valores dos atributos através de chamadas aos métodos mostrarChefe() e mostrarAluno().

Polimorfismo O poliformismo deriva da palavra polimorfo, que significa multiforme, ou que pode variar a forma. Para a POO, polimorfismo é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras. Ou seja, várias formas de responder à mesma mensagem.

Polimorfismo

Polimorfismo Vejamos o seguinte exemplo: um dono de uma fábrica de brinquedos solicitou que seus engenheiros criassem um mesmo controle remoto para todos os brinquedos de sua fábrica. A única restrição era que cada brinquedo atendesse aos comandos específicos definidos pelo controle.

Polimorfismo

Polimorfismo Assim quando o brinquedo recebe o sinal MOVER, ele se move de acordo com a sua função. Para o avião, mover significa VOAR; Para o barco significa NAVEGAR, e Para o automóvel CORRER. Observe que os brinquedos respondem ao mesmo sinal de formas diferentes.

Polimorfismo O Polimorfismo permite que diferentes objetos (avião, barco, automóvel) respondam uma mesma mensagem (mover) de formas diferentes (voar, navegar e correr).

Polimorfismo Tipos de polimorfismo O Polimorfismo pode ser classificado de três maneiras: Polimorfismo de Sobrecarga Polimorfismo de Sobreposição Polimorfismo de Inclusão

Polimorfismo Polimorfismo de Sobrecarga Permite que um método de determinado nome tenha comportamentos distintos, em função de diferentes parâmetros que ele recebe. Cada método difere no número e no tipo de parâmetros.

Polimorfismo Veja no exemplo uma aplicação prática do uso do polimorfismo de sobrecarga.

Polimorfismo A sobrecarga e os construtores O polimorfismo de sobrecarga normalmente acontece sobre os métodos construtores, pois é comum para uma classe ter várias maneiras de instanciá-la. O programa abaixo ilustra um exemplo de polimorfismo de sobrecarga nos construtores da classe Pessoa.

Polimorfismo Observe que são declarados 3 construtores e todos eles têm o mesmo nome da classe. Entretanto, cada um deles recebe um número diferente de parâmetros.

Polimorfismo Polimorfismo de Sobreposição É a redefinição de métodos em classes descendentes. Ou seja, um método de uma classe filha com o mesmo nome de um método de uma classe mãe irá sobrepor esse último. Vejamos o exemplo.

Polimorfismo O polimorfismo de sobreposição em Java Considere que a classe Brinquedo possui como descendentes as classes Carro, Avião e Barco, conforme ilustra a Figura. Observe que as classes filhas sobrepõem o método mover() da classe Brinquedo.

Polimorfismo Vejamos então como ficam essas classes codificadas em Java.

Polimorfismo Considerando o método mover() de cada classe filha, como poderíamos chamar o método mover() do brinquedo (classe) correto? Ou seja, como o ControleRemoto saberá que método mover ele deve chamar se ele tem disponível três tipos de mover diferentes (um para cada brinquedo)?

Polimorfismo Vamos ver inicialmente como fica a implementação do Controle Remoto.

Polimorfismo O programa mostra como fica a classe Principal que instancia um objeto controleRemoto e um objeto carro para ser controlado automaticamente. Foi criado um brinquedo do tipo Carro, e o ControleRemoto. Foi enviado o objeto carro para o objeto controleRemoto através da chamada ao seu construtor. Assim, quando acionado o comando controleRemoto.mover(), será chamado o método mover() do carro.

Atividade Implemente as classes da hierarquia da classe Figura Geometrica mostrada na Figura abaixo em Java, aplicando o polimorfismo de sobreposição para o método desenha(). Em seguida, crie uma classe Principal com um método main que cria um objeto de cada uma das classes e chama seus respectivos métodos desenha().

Polimorfismo Polimorfismo de Inclusão No exemplo visto anteriormente, em que na classe Principal, foi criado um objeto do tipo Carro e outro do tipo ControleRemoto, utilizou-se o polimorfismo de inclusão. Isso foi feito substituindo a classe Brinquedo pela classe Carro dentro da classe ControleRemoto.

Polimorfismo Veja a Figura.

Polimorfismo Observe que a classe ControleRemoto está relacionada com a classe Brinquedo, pois possui um atributo do tipo Brinquedo. Mas, como as classes Carro, Avião e Barco são do tipo Brinquedo, elas podem substituir a classe Brinquedo em qualquer método que a utilize. A capacidade do objeto (brinquedo) do tipo Brinquedo da classe ControleRemoto de receber qualquer um objeto de subclasses da classe Brinquedo é que caracteriza o polimorfismo de inclusão.  

Trabalho Faça um exemplo prático para apresentar os seguintes conceitos em Java. Static Interface, Implements e Abstract

Referências BARNES, David J.; KÖLLING Michael.Programação orientada a objetos com Java. São Paulo: Editora Pearson Prentice Hall, 2004. DEITEL, H. M.; DEITEL, P. J. Java como programar. Porto Alegre: Bookman, 2003. LEMAY, Laura. Aprenda Java em 21 dias. Tradução: Daniel Vieira. Rio de Janeiro: Campos, 2003. SANTOS, Rafael. Introdução à programação orientada a objetos usando Java. São Paulo: Editora Campus, 2003. SINTES, Anthony. Aprenda a programar orientada a objeto em 21 dias. Tradução: João Eduardo Nóbrega Tortello. São Paulo: Pearson Education do Brasil, 2002. THE JAVA: tutorials. [Tutorial Oficial Java]. Disponível em: <http://java.sun.com/docs/books/tutorial/>. Acesso em: 13 maio 2010. http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/

Referências THE JAVA: tutorials. [Tutorial Oficial Java]. Disponível em: <http://java.sun.com/docs/books/tutorial/>. Acesso em: 13 maio 2010. About the Java Technology. Disponível em: <http://java.sun.com/docs/books/tutorial/getStarted/intro/defini tion.html>. Acesso em: 13 maio 2010. WIKIPÉDIA. Máquina virtual Java. Disponível em: <http://pt.wikipedia.org/wiki/Máquina_virtual_Java>. Acesso em: 13 maio 2010. DEITEL, H. M.; DEITEL, P. J. Java como programar. Porto Alegre: Bookman, 2003. SANTOS, Rafael. Introdução à programação orientada a objetos usando Java. Rio de Janeiro: Editora Campus, 2003.