Programação Orientada a Objetos quarta-feira, 2 de maio de 2012 • Conceitos • Orientação a Objetos: Conceito e Vantagens • Metodologias • Orientação • Classes quarta-feira, 2 de maio de 2012 da OO a Objetos Introdução • Paradigmas de Programação • Programação Estruturada • Procedimentos e Funções. Ex.: C e Pascal. • Compostos de: seqüência, decisão e iteração • Programação Orientada a Eventos • RAD. Ex: Delphi e Visual Studio. • Programação Orientada à Objetos • Foco em classes (atributos e métodos) comunicação entre classes. quarta-feira, 2 de maio de 2012 e Introdução • Programação funcional • Lisp • Programação Orientado • Java(AspectJ) quarta-feira, 2 de maio de 2012 a aspecto Conceito • Programação Orientada a Objetos é um paradigma de Análise, Projeto e Programação que é baseado na relação entre objetos que irão compor o sistema. quarta-feira, 2 de maio de 2012 Conceitos • Linguagens OO: C++, Java, C# , ObjectPascal, Ruby, Python. • Reuso de código • Encapsulamento • Acoplamento quarta-feira, 2 de maio de 2012 Conceitos • Análise: • Investigar o que tem de ser • Projeto: • Planejar como será feito. • Implementação: • Colocar a mão na massa. quarta-feira, 2 de maio de 2012 feito. Objeto •O objeto é uma representação de algo que seja real ou abstrato que contenha traços bem definidos. quarta-feira, 2 de maio de 2012 Vantagens •Facilidade de manutenção. •Reusabilidade. •Simplicidade. •Agilidade. quarta-feira, 2 de maio de 2012 Principais Elementos • Classes • Defini a estrutura do objeto • Objetos contém: • Atributos(Definição de seus traços, características) • Métodos - “Comportamentos” • Construtores - Criar um objeto quarta-feira, 2 de maio de 2012 Exemplo de Objetos • Objetos: Mesa, Cadeira, Pessoa, Carro, Conta bancaria, Clima • E os traços?? • Como classificar objetos: • Objetos com os mesmo traços recebem a mesma classificação. • Os objetos podem ser concretos ou abstrato: • Concretos: pessoa, carro, • Abstratos: conta, música quarta-feira, 2 de maio de 2012 casa Linguagem Java • Poderosa • Abrangente • Híbrida - Compilada / Interpretada • Funciona em qualquer equipamento virtuais quarta-feira, 2 de maio de 2012 Máquinas Linguagem Java • Ciclo de funcionamento: • código fonte --> compilador --> bytecode(saída) --> execução(máquina virtual) quarta-feira, 2 de maio de 2012 1.02 JavaJava1.02 1996 250 classes Lenta. Java 5.0 (versões 1.5 e Java Java 1.22 (versões - 1.41.2 - 1.4) Java 1.5 posteriores) 1998,2000,2002 2004 Java 6 - 2006 Java 7 - 2011 Atualmente esta na versão Java 1.7 ou Java 7 Nome e logotipo in teressante s. Divertida de u sar . Muito s erros . Os applets são o destaque. Java 1.1 Java 1.1 1997 500 classes 2.300 classes Um pouco ma is rápida. MUito mais rápida. Mais recursos , mais amigável. Começando a se tornar muito popular. Código de GUI mais adequado . Po de (em al gumas situações) ser exec ut ada e m velocidades condi zentes . Pro fi ssion al, poderosa. Vem e m três versões: Micro Edition (J2ME), Standard Edit ion (J 2SE) e Enterprise Edition .(J2EE). Torna - se a linguagem preferida para novos ap li cativos empresari ai s (pr incipa lmente os baseados na Web) e móvei s . 3.500 classes Mais recursos, mais fácil de desenvolver. Além d e ad ici ona r mais de n;lil clas s es comp l ement ares, a Java 5. O (conhecida como "Tiger'j ) acre s cento u alterações sign if icativas à própria l ingu agem, tornando-a maiS j fáCil (pe lo menos em teoria) p ar l os prog r a madores e f ornecendo novo s recu r sos que eram populare; em ou tr a s linguagens. ( quarta-feira, ( ( (' 2( de( maio ( de ( 2012 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (' ( ( ( ( \ ( ; Problemática • Era uma vez em uma loja de softwares, dois programadores que receberam as mesmas especificações e a ordem "construam". O Gerente de Projetos Muito Chato forçou os dois codificadores a competirem, prometendo que quem acabasse primeiro ganharia uma daquelas modernas cadeiras AeronTM que todo mundo no Vale de Santa Clara tem. quarta-feira, 2 de maio de 2012 quarta-feira, 2 de maio de 2012 As especificações t te m. da r? ". m quarta-feira, 2 de maio de 2012 • Tanto Larry, o programador de procedimentos, quanto Brad, o adepto da 0 0 , sabiam que isso seria fácil. quarta-feira, 2 de maio de 2012 Larry • Como já tinha feito milhares de vezes, Larry começou a escrever seus Procedimentos Importantes. Ele criou rotate e playSound sem demora. • rotate(shapeNum) { faz a • playSound(shapeNum) {usa forma girar 360' } shapeNum para pesquisar que som AIF reproduzir e executá-lo} quarta-feira, 2 de maio de 2012 envolvidos?" aro que ele o evento de Clicar. ens, portanto, se ra saber como Brad e resposta à " Brad A cadeira laptopclasses de Brad para dentro representar do restauranteos • BradNocriou r elementos ;1 ou a Brad criou uma classe para cada uma das três formas gráficos: ou rotate e Square 11 II có Circle rotate ( playSo1.; o } /I có -1 Triangle r ota te () { II código pa ra gira r um triângul o playSou } li II de } I IJ } /I có '"'-I I; } II có II de . J 11 ro·ta t e p laySound () { fi código pa ra rep ro duzi r o arquivo AIF !I I / de um triângulo } quarta-feira, 2 de maio de 2012 _. I _J fi código pa ra rep ro duzi r o arquivo AIF I / de um triângulo _J Alteração na _. especificação } e ixo temos á eba na d U\:n a am , formatO e f :nas. Havera o as outras on · ba ela . to CO\:n , . a ame ' tela, .lun uár'o ClICar n _e Quando o us s outras formas bif , O\:nO a . de SO\:n . <Tirara c , .,... arquIVO ' d\rz.i.ra UI" repro t;> rry, o. "E e . !I da o que foi adicionado às especificações quarta-feira, 2 de maio de 2012 Larry • Larry teve de rescrever o código para tocar a música quarta-feira, 2 de maio de 2012 classes e objetos Brad Usando o laptop de Brad na praia va um • Brad sorriu, tomou um gole de sua marguerita e criou uma nova classe . Às vezes o que ele mai s adorava na 00 era não ser preciso mexer em código que já tivesse sido testado e Brad criou apenas extensibilidade mais uma ...classe para distribuído. "Flexibilidade, " ele pensou, refletindo sobre osabenefícios da 00. representar Amoeba Amoeba rotate () II c ó digo pa ra girar a ameba playSound ( ) s e de as. 1/ código para repr odu z ir o n ovo I I a rqui vo .hif de uma a me ba Brad. quarta-feira, 2 de maio de 2012 II I; de um ponto em uma extremidade, como um ponteiro de relógio . m Wonderbread™ chamuscado. "Porém, hmmm. Eu poderia apenas mento de rotação e, em seguida, embutir o código do ponto de atrapalhará nada." Mas uma voz longínqua em sua mente dizia: te que as especificações não mudarão novamente?" Nova Mudança ba na versa da ame de rotaçao ponto d' de Larry e Bra . Onde o ' a estar. deve(1 quarta-feira, 2 de maio de 2012 de rotaçao da ameba O o que as especificações esqueceram de mencionar adequadamente Larry • Teve de rescrever praticamente todo o código quarta-feira, 2 de maio de 2012 testado e compilado das outras partes do programa. Para fornecer à classe Amoeba um ponto de rotação, ele adicionou um atributo que todos os objetos Amoeba teriam. Ele modificou, testou e di stribuiu (com tecnologia sem fio) o programa revisto apen as durante o show de Bela Fleck. Brad Amoeba in t x point; int y point; rotate() ( II c ó dig o para girar a ameba / 1 usa n do os pontos x e y playSound() II código para reproduzir o novo 1/ a rqui vo .hi f d e uma ameba adeira, certo? quarta-feira, 2 de maio de 2012 iJ Mas então quem ganhou a cadeira? quarta-feira, 2 de maio de 2012 do. execução, a JVM saberá exatamente que métod importa. Como a ameba pode fazer algo diferente se ela "herda" sua funcionalidade da Amoeba gire. ? Solução detalhada de BRAD é a última etapa. A classe Amoeba sobrepõe os métodos da classe Shape. Portanto, no tempo de JVM saberá exatamente que método rotate( ) exec utar quando alguém solicitar que o objeto . S Fiz com que a classe Amoeba sobrepusesse os métodos rotate( ) e playSound( ) da superclasse Shape. Sobrepor significa apenas que uma subclasse redefinirá um de seus métodos herdados quando precisar alterar ou estender o comportamento desse método. Superclasse Shape ro ta te () (mais abstrata) Superclasse (mais abstrata) Square Square .___1 "J Subclasses (mais específicas) ---I Métodos de sobreposição da ameba playSound ( ) Il código de reprodução de som Ilespecífico • da ameba .___1 Subclasses (mais específicas) o você "diria" a um objeto Amoeba para fazer algo? Não é preciso chamar o procedimento, - I étodo, e, em seguida, lhe informar que item girar? quarta-feira, 2 de maio de 2012 "J r ódigo do programa referenciará (chamará) o método rotate( ) no objeto Triangle. O resto do programa não aberá ou se importará realmente em como o tliângulo o fará. E quando você precisar adicionar algo novo o programa, apenas criará uma nova classe para o novo tipo de objeto, para que os novos objetos tenham eu próprio comportamento. Sei como um objeto Shape deve se comportar. Sua tarefa é me informar o que fazer e a minha é fazer acontecer. Não o O o você está aqui quarta-feira, 2 de maio de 2012 !lo-- Classe • Quando formos criar uma classe temos de nos preocupar com duas coisas: •o •o quarta-feira, 2 de maio de 2012 que o OBJETO conhece que o OBJETO faz Despertador carrinhoCompras a classe, pense nos objetos que serão criados h o r a Alarme con t e údoCarrinho conhece modoAl arme Considere: ad i c i o narAoCarrinho( configurarHoraAlarme ( carJtur a1. Ho [CtAlarme ( ) a l a rmeEs!:..iC:1n f i g u rado( faz remove rDoCa r r i nho( passarCai x a ( ) ) s o n e ca ( ) Botão carrinhoCompras ce con t e údoCarrinho ad i c i onarAoCarrinho( remove rDoCa r r i nho( ) passarCai x a ( ) quarta-feira, 2 de maio de 2012 conhece faz rótul o cor con fi g u r arCor ( ) conf i gu rarRó t u l o( ) soltar( ) pressionarNovarnente ( ) Classe •O que o OBJETO conhece chamamos de variáveis de instancia ou atributos •o que o OBJETO faz chamamos de métodos é a parte comportamental quarta-feira, 2 de maio de 2012 , Aponte seu lápis Atividade Preencha com o que um objeto televisão pode ter que saber e fazer. Televisão li li variáveis de instância (estado) métodos (comportamento) I! quarta-feira, 2 de maio de 2012 Interface •É um grupo de métodos sem nenhuma implementação que dá a liberdade de se criar elementos que possam se comunicar e trocar mensagens. Uma classe em java pode-se utilizar de várias interfaces ao mesmo tempo. quarta-feira, 2 de maio de 2012 Exemplo public interface Veiculo { boolean ligar(); boolean desligar(); } public class Carro implements Veiculo{ • public boolean ligar() {...} quarta-feira, 2 de maio de 2012 Herança • Forma com que uma classe possa herdar os comportamentos de outra classe, não herda os atributos apenas os métodos. Em java existe apenas a herança simples. quarta-feira, 2 de maio de 2012 Exemplo public abstract class Veiculo { ..... } • public class Carro extends Veiculo { • ..... quarta-feira, 2 de maio de 2012 Polimorfismo • Forma de abstração em que é possível utilizar uma classe pai ou interface como referencia do objeto. Com isso é possível se utilizar de chamadas polimorficas sem a necessidade de identificar qual classe realmente se esta trabalhando. quarta-feira, 2 de maio de 2012 Exemplo public interface Veiculo { boolean ligar(); boolean desligar(); } public class Carro implements Veiculo{ • .... } • Main{ • Veiculo c = new Carro(); • c.ligar(); quarta-feira, 2 de maio de 2012 Exemplo public abstract class Veiculo { public boolean ligarVeiculo(){} public boolean desligarVeiculo(){} } public class Carro extends Veiculo{ • .... } • Main{ • Veiculo c = new Carro(); • c.ligar(); quarta-feira, 2 de maio de 2012 Atividade • Utilizando se da atividade anterior (Carro,Motor) cria uma interface Veiculo com os seguintes métodos: • boolean ligar(); • boolean desligar(); • boolean andar(); • boolean parar(); quarta-feira, 2 de maio de 2012