!
Faculdade(Metropolitana(de(Manaus(
(
(
(
(
(
(
(
Apostila(POO(–(Programação(Orientada(a(Objetos(
(
(
Professor:(Msc.(Manfrine(Tapiramutá.(
(
(
(
(
(
(
(
(
Manaus(@(AM(
(
Sumário(
1!
Publico!Alvo!...!3!
2!
Descrição!...!4!
2.1!
Criando!uma!classe!...!6!
3!
IDE!Eclipse!...!6!
4!
introdução!a!orientação!a!objetos!...!12!
4.1!
objetos!...!13!
4.2!
Classe!...!14!
4.3!
herança!...!16!
4.4!
Encapusulamento!...!18!
4.4.1!
Definição!de!Modificadores!de!Acesso!...!18!
4.4.2!
Os!métodos!Gets!e!Sets!...!19!
4.5!
POLIMORFISMO!...!21!
4.5.1!
Sobrecarga!...!21!
4.5.2!
Sobresecrita!...!22!
4.6!
Classe!Abstrata!...!22!
4.7!
Interfaces!...!23!
!(
(
(
(
(
(
(
!
1( PUBLICO(ALVO(
Essa!apostila!é!destinada!a!estudantes!que!tem!conhecimentos!em!lógica!de!programação.! A!programação!orientada!a!objetos!é!um!modo!de!programar!que!vem!sendo!utilizado!por! quase!todas!as!linguagens!de!programação!que!dominam!o!mercado!de!desenvolvimento.! Desde!já!agradeço!a!todos!por!utilizar!o!trabalho!para!fins!alterativos!de!conhecimento.! !(
2( DESCRIÇÃO(
A!programação!Orientada!a!Objetos!T!POO!é!uma!forma!de!programação!que!tem!como! principal!função!aproximar!o!mundo!real!do!mundo!virtual.!
A! Orientação! a! Objeto! ou! apenas! OO,! é! uma! tecnologia! de! desenvolvimento! de! software!em!que!as!linguagem!de!programação!estão!se!adaptando!e!se!adequando!a! ela,! pelo! fato! de! seus! conceitos! serem! vistos! com! bons! olhos! por! críticos! em! desenvolvimento!de!sistemas.!
A!grosso!modo!falando,!a!POO!tenta!dissolver!os!problemas!mais!complexos!utilizando! formas! de! programação! que! ajude! nesse! processo! de! desenvolvimento,! para! isso! a! POO!conta!com!vários!conceitos:!
!! Classe!representa! um! conjunto! de! objetos! com! características! afins.! Uma! classe! define!o!comportamento!dos!objetos!através!de!seus!métodos,!e!quais!estados!ele!é! capaz!de!manter!através!de!seus!atributos.!Exemplo!de!classe:!Os!seres!humanos.! !! Subclasse! é! uma! nova! classe! que!herda!características! de! sua(s)! classe(s)!
ancestral(is).!
!! Objeto(/(instância!de!uma!classe.!Um!objeto!é!capaz!de!armazenar!os!valores!que! serão!inseridos!através!de!seus!atributos!e!capaz!de!exercer!reação!a!mensagens! enviadas! a! ele,! assim! como! se! relacionar! e! enviar! mensagens! a! outros! objetos.! Exemplo!de!objetos!da!classe!Humanos:!João,!José,!Maria!
!! Atributo!são!características!de!um!objeto.!Basicamente!a!estrutura!de!dados!que!vai! representar! a! classe.! Exemplos:! Funcionário:! nome,! endereço,! telefone,! CPF,...`! Carro:!nome,!marca,!ano,!cor,!…`!Livro:!autor,!editora,!ano.!Por!sua!vez,!os!atributos! possuem!valores.!Por!exemplo,!o!atributo!cor!pode!conter!o!valor!azul.!O!conjunto!de! valores!dos!atributos!de!um!determinado!objeto!é!chamado!de!estado.!
!! Método!definem! as! habilidades! dos! objetos.! Bidu! é! uma! instância! da! classe! Cachorro,! portanto! tem! habilidade! para! latir,! implementada! através! do! método! deUmLatido.!Um!método!em!uma!classe!é!apenas!uma!definição.!A!ação!só!ocorre! quando!o!método!é!invocado!através!do!objeto,!no!caso!Bidu.!Dentro!do!programa,!a! utilização! de! um! método! deve! afetar! apenas! um! objeto! em! particular`! Todos! os! cachorros! podem! latir,! mas! você! quer! que! apenas! Bidu! dê! o! latido.! Normalmente,! uma!classe!possui!diversos!métodos,!que!no!caso!da!classe!Cachorro!poderiam!ser! sente,!coma!e!morda.!
!! Mensagem!é!uma!chamada!a!um!objeto!para!invocar!um!de!seus!métodos,!ativando! um! comportamento! descrito! por! sua! classe.! Também! pode! ser! direcionada! diretamente!a!uma!classe!(através!de!uma!invocação!a!um!método!estático).!
!! Herança!(ou!generalização)!é!o!mecanismo!pelo!qual!uma!classe!(subTclasse)!pode! estender!outra!classe!(superTclasse),!aproveitando!seus!comportamentos!(métodos)! e!variáveis!possíveis!(atributos).!Um!exemplo!de!herança:!Mamífero!é!superTclasse! de!Humano.!Ou!seja,!um!Humano!é!um!mamífero.!Há!herança!múltipla!quando!uma!
! subTclasse!possui!mais!de!uma!superTclasse.!Essa!relação!é!normalmente!chamada! de!relação!"é!um".! !! Associação!é!o!mecanismo!pelo!qual!um!objeto!utiliza!os!recursos!de!outro.!Pode! tratarTse!de!uma!associação!simples!"usa!um"!ou!de!um!acoplamento!"parte!de".!Por! exemplo:!Um!humano!usa!um!telefone.!A!tecla!"1"!é!parte!de!um!telefone!
!! Encapsulamento!consiste! na! separação! de! aspectos! internos! e! externos! de! um! objeto.! Este! mecanismo! é! utilizado! amplamente! para! impedir! o! acesso! direto! ao! estado! de! um! objeto! (seus! atributos),! disponibilizando! externamente! apenas! os! métodos! que! alteram! estes! estados.! Exemplo:! você! não! precisa! conhecer! os! detalhes!dos!circuitos!de!um!telefone!para!utilizáTlo.!A!carcaça!do!telefone!encapsula! esses! detalhes,! provendo! a! você! uma! interface! mais! amigável! (os! botões,! o! monofone!e!os!sinais!de!tom).!
!! Abstração!é! a! habilidade! de! concentrar! nos! aspectos! essenciais! de! um! contexto! qualquer,! ignorando! características! menos! importantes! ou! acidentais.! Em! modelagem! orientada! a! objetos,! uma! classe! é! uma! abstração! de! entidades! existentes!no!domínio!do!sistema!de!software!
!! Polimorfismo!consiste! em! quatro! propriedades! que! a! linguagem! pode! ter! (atente! para!o!fato!de!que!nem!toda!linguagem!orientada!a!objeto!tem!implementado!todos! os!tipos!de!polimorfismo):!
!! Universal:!
!! Inclusão:! um! ponteiro! para! classe! mãe! pode! apontar! para! uma! instância! de! uma! classe! filha! (exemplo! em! Java:! "List! lista! =! new! LinkedList()`"! (tipo! de! polimorfismo!mais!básico!que!existe)!
!! Paramétrico:! se! restringe! ao! uso! de!templates!(C++,! por! exemplo)! e!generics!(Java/C♯)!
!! AdTHoc:!
!! Sobrecarga:! duas! funções/métodos! com! o! mesmo! nome! mas! assinaturas! diferentes!
!! Coerção:! a! linguagem! que! faz! as! conversões! implicitamente! (como! por! exemplo!atribuir!um!int!a!um!float!em!C++,!isto!é!aceito!mesmo!sendo!tipos! diferentes!pois!a!conversão!é!feita!implicitamente)!
!! Interface!é! um! contrato! entre! a! classe! e! o! mundo! externo.! Quando! uma! classe! implementa! uma! interface,! ela! está! comprometida! a! fornecer! o! comportamento! publicado!pela!interface!
!! Pacotes! (ou! Namespaces)! são! referências! para! organização! lógica! de! classes! e! interfaces!
2.1! CRIANDO!UMA!CLASSE!
Uma! tem! como! principal! função! compartilhar! características! para! os! objetos! que! irão! ser! criado!a!partir!dela.!Traduzindo!as!Classes!são!uma!“Fabrica!de!Objetos”.!
Abaixo!um!código!escrito!na!linguagem!JAVA.!
(
package aula;
public class Primeiro {
public static void main(String[] args) {
System.out.println("Hello World"); }//fim do método main
}//fim da classe
3( IDE(ECLIPSE(
Pacote! onde! está! localizado! o! código!
Método! main(),! que! executa! todos! os! código!JAVA.!
Comando! de! impressão! de! informação.!
!
(
4( INTRODUÇÃO(A(ORIENTAÇÃO(A(OBJETOS(
!
4.1! OBJETOS!
Cada!objeto!simula!um!conceito!ou!abstração,!e!pode!responder!a!mensagens!que!
recebe!e!que!fazem!parte!do!seu!protocolo!de!comunicação!com!os!demais!objetos!
do!sistema.!Ao!reconhecer!uma!mensagem,!o!objeto!ativa!uma!das!rotinas!de!seu!
repertório! particular! (um! método),! que! descreve! o! comportamento! do! objeto!
associado!a!essa!mensagem.!Um!objeto!é!uma!instância!de!sua!classe.!É!a!classe!
que!contém!a!descrição!da!representação!interna!e!dos!métodos!comuns!a!todas!as!
suas!instâncias.!Cada!instância!da!classe,!por!sua!vez,!possui!sua!própria!memória!
privativa! (seu! estado! interno)! onde! ficam! armazenados! os! valores! de! seus!
componentes,!que!representam!suas!características!individuais.!Um!objeto!requisita!
a!ação!de!algum!outro!objeto!enviando!uma!mensagem!para!ele.!
4.2! CLASSE!
!
Classes:(
Uma! classe! representa! um! gabarito! para! muitos! objetos! e! descreve! como! estes!
objetos! estão! estruturados! internamente.! Objetos! de! mesma! classe! possuem! a!
mesma!definição!tanto!para!métodos!quanto!para!atributos.!Classes!são!compostas!
por!atributos!(dados)!e!operações!(métodos)!que!atuarão!sobre!esses!atributos.!Os!
atributos! e! as! operações! são! os! membros! da! classe.! Por! exemplo,! uma! classe!
Círculo! teria! como! atributos! o! raio! e! o! centro,! e! como! métodos! uma! função! para!
calcular!a!área!e!outra!para!calcular!o!perímetro.!
Abaixo!uma!classe:!
package aulaAtributo;
public class Pessoa { String nome; String rg; String telefone; int idade; float salario; void comprar(){
System.out.println("A pessoa acabou de comprar"); }
void calc(){
if(idade < 18){
System.out.println("não pode comprar"); }else{
System.out.println("Pode comprar"); comprar(); } } }
Classe(de(Teste(
!
public class Teste2 {public static void main(String[] args) { Pessoa p1 = new Pessoa();
Método!!
Atributos.!
Criando! Objetos,! objetos! são! instâncias! das! classes,! então! se! eu! quero! utilizar! a! características! definidas! nas! classes,! eu! preciso! instanciar! objetos! do! mesmo! tipo! da! classe.!
Classe! Scanner! tem! a! características!de! capturas! os!
!
Scanner e = new Scanner(System.in);
System.out.println("Digite o nome da pessoa"); p1.nome = e.next();
System.out.println("Digite o RG da pessoa"); p1.rg = e.next();
System.out.println("Digite a idade"); p1.idade = e.nextInt();
System.out.println("Digite um salario"); p1.salario = e.nextFloat();
System.out.println("O nome digitado foi: "+p1.nome); System.out.println("O rg digitado foi: "+p1.rg);
System.out.println("O salario digitado foi: R$ "+p1.salario); p1.calc(); } }
!
!
!!
O! método! next(),! é! da! classe! Scanner,! ele! captura! Strings! que! venha! do! teclado.! E! o! objeto! p1! está! recebendo! esse!nome!e!armazenando!no! atributo!nome.!
Mostra! o! que! foi! adicionado! nas!variáveis.!
Mostra! o! método! da!Classe!
4.3! HERANÇA!
!
Herança:!
Herança!é!um!mecanismo!para!definir!novas!classes!a!partir!de!classes!existentes.!
Define! um! relacionamento! entre! classes! onde! uma! classe! compartilha! dados! e/ou!
operações!com!uma!ou!mais!classes.!Por!exemplo,!a!classe!Felinos!herda!todos!os!
atributos! e! operações! da! classe! Animal.! Além! disso! Felinos! define! seus! próprios!
atributos!e!operações!como!o!atributo!corDoPêlo!e!a!operação!miar.!!
Java!implementa!herança!com!o!uso!de!extends.!
Exemplo:!
!
package apostila;
public class Funcionario { int matricula;
String nome; float salario;
public void trabalhar(){
System.out.println("Trabalhando"); }
}
______________________________________________ package apostila;
public class Vendedor extends Funcionario{ float Comissao;
}
_____________________________________________________! import java.util.Scanner;
public class TesteHerança {
public static void main(String[] args) { Vendedor vendedor = new Vendedor(); Scanner en = new Scanner(System.in);
A! cláusula! extends! realiza! a! herança,! criando! a! relação! “É! um”! o! Vendedor!é!um!Funcionario.!
!
System.out.println("Digite um nome do Vendedor"); vendedor.nome = en.next();
System.out.println("Digite a matricula do Vendedor"); vendedor.matricula = en.nextInt();
System.out.println("Digite salario do Vendedor"); vendedor.salario = en.nextFloat();
System.out.println("Digite a comissão do Vendedor"); vendedor.comissao = en.nextFloat();
System.out.println("O nome digitado foi: "+ vendedor.nome);
System.out.println("A matricula digitado foi: "+ vendedor.matricula);
System.out.println("O salário digitado foi: "+ vendedor.salario); System.out.println("A comissão digitada foi: "+ vendedor.salario); vendedor.trabalhar();
} }!
!
Notem! que! a! única! característica! cadastrada! em! Vendedor! foi! comissão,! Por! meio!
da!herança!ele!pode!utilizar!todas!as!características!declarada!no!funcionário.!
4.4! ENCAPUSULAMENTO!
!
4.4.1( Definição(de(Modificadores(de(Acesso(
!
!
Encapsulamento:!!!!
!!!!Em!Java!são!utilizadas!as!palavrasTchave!public,!protect!e!private!para!restringir!o!
acesso! a! membros! de! uma! classe.! Um! método! ou! variável! declarado! como! public!
pode! ser! acessado! por! todos,! sem! nenhuma! restrição.! Um! método! ou! variável!
declarado! como! protected! só! pode! ser! acessado! por! membros! da! mesma! classe,!
mesmo! pacote! e! subTclasses! (herança).! Um! método! ou! variável! declarado! como!
private!só!pode!ser!acessado!por!membros!da!mesma!classe.!Se!na!declaração!de!
uma! variável! ou! método! não! for! especificado! nenhum! modificador! de! acesso,! o!
modo! default! será! aplicado.! Neste! modo! default,! esses! membros! só! podem! ser!
acessados!por!membros!da!mesma!classe!ou!do!mesmo!pacote.!!
!
!
EXEMPLO:!
!package aulaEncapsulamento;
public class Pessoa {
private String nome;
private String sobrenome;
private float peso;
public void setNome(String nome){
this.nome = nome; }
public String getNome(){
return nome; }
public void setSobrenome(String sobrenome){
this.sobrenome = sobrenome; }
public String getSobrenome(){
return sobrenome; }
public void setPeso(float peso){
this.peso = peso; }
public float getPeso(){
return peso; }
public void andar(){
if(peso>200){
System.out.println("Você precisa andar mais"); }else{
System.out.println("Andar faz bem a saúde"); } } }
4.4.2( Os(métodos(Gets(e(Sets(
São!métodos!de!acesso!aos!atributos!privados.!GET!–!acessa!o!objeto!e!mostra!o!
que!foi!adicionado,!exibe!a!informação!adicionada!no!atributo!privado.!
Já!o!SET!–!acessa!o!objeto!e!altera!ou!adiciona!uma!informação!ao!atributo!private.!
Dessa!forma!podemos!dizer!que,!toda!vez!que!eu!quero!adicionar!ou!modificar!as!
informações!num!atributo!privado!eu!acesso!através!do!método!get!e!set!criado!para!
ela.!
!
!
!
!
Declaremos! os! atributos! sempre! como! private! para! que! eles! não! sofram! alterações! indesejadas! no!objetos.!
Quando! declaramos! que! os! atributos! são! privados,! OBRIGATÓRIAMENTE! temos! que! CRIAR! MÉTODOS! PÚBLICOS! de! acessos! a! esses! atributos.!São!os!Gets%e%Sets.!
Notem!que,!!apesar!de!ter!declarado! o! atributo! privado! eu! estou! acessando!ele!diretamente,!como!no! caso! do”! if(peso>200)”,! isso! só! é! possível! porque,! o! método! está! na! mesma!classe.!
Classe!de!Teste!do!encapsulamento.!
package encapsulamento;
import java.util.Scanner;
public class TestePessoa {
public static void main(String[] args) { Pessoa pessoa = new Pessoa();
Scanner entrada = new Scanner(System.in); System.out.println("Digite o nome"); pessoa.setNome(entrada.next());
System.out.println("Digite o sobrenome"); pessoa.setSobrenome(entrada.next()); System.out.println("Digite o peso"); pessoa.setPeso(entrada.nextFloat());
System.out.println("O nome é: " + pessoa.getNome());
System.out.println("O sobrenome é: " + pessoa.getSobrenome()); System.out.println("o peso é: " + pessoa.getPeso());
pessoa.andar(); }
}!
!
!
4.5!
POLIMORFISMO
!
Polimorfismo!nem!do!grego!POLI!=!vários!ou!várias,!MORFISMO!=!formas,!então!são!várias! formas!de!se!realizar!uma!mesmo!função.!Nos!meus!estudos!para!entender!esse!assunto!vi! uma! descrição! no! site! que! fala! assim,! “São! como! os! Power! Rangers! morfão”! e! eu! fique! pensando!realmente!cada!um!vai!se!transformar!com!a!palavra!e!a!ação!de!“morfar”,!mas! cada!um!vai!ter!sua!própria!ação!sua!própria,!cada!um!com!sua!cor,!sua!armas,!etc.!
!
4.5.1( Sobrecarga(
4.5.2( Sobresecrita(
!
!
4.6! CLASSE!ABSTRATA!
!
(
EXEMPLO(
(
public!abstract!class!ProdutoEletronico!{! ! private!String!modelo`! ! private!String!fabricante`! ! ! ( public(abstract(void(ligar()^! ( public(abstract(void(desligar()^! ! ! ! public!String!getFabricante()!{! ! ! return!fabricante`! ! }! ! public!void!setFabricante(String!fabricante)!{! ! ! this.fabricante!=!fabricante`! ! }! ! public!String!getModelo()!{! ! ! return!modelo`! ! }! ! public!void!setModelo(String!modelo)!{! ! ! this.modelo!=!modelo`! ! }!! }!