[lógica] orientação a objetos descomplicada

117
Eduardo Ricoldi Orientando a Orientação a Objetos

Upload: eduardo-ricoldi

Post on 15-Jun-2015

315 views

Category:

Education


0 download

DESCRIPTION

O aprendizado em uma linguagem orientada a objetos começa muito antes do conhecimento de recursos da mesma, mas no modo de trabalhar sobre ela, como é definido o raciocínio e localização dos trechos de código. Visando esta etapa do estudo com intenção de promover para o desenvolvedor o conhecimento básico para uma migração tranqüila da programação estruturada para a orientada a objetos. A Orientação Objeto depende mais da mentalidade do programador do que da linguagem de programação que está sendo utilizada.

TRANSCRIPT

  • 1. Eduardo Ricoldi

2. Eduardo Ricoldi O curso O aprendizado em uma linguagem orientada a objetos comea muito antes do conhecimento de recursos da mesma, mas no modo de trabalhar sobre ela, como definido o raciocnio e localizao dos trechos de cdigo. Visando esta etapa do estudo com inteno de promover para o desenvolvedor o conhecimento bsico para uma migrao tranqila da programao estruturada para a orientada a objetos. 2 3. Eduardo Ricoldi O que O.O Na qualidade de mtodo de modelagem, tida como a melhor estratgia para se eliminar o GAP semntico*, dificuldade recorrente no processo de modelar o mundo real do domnio do problema em um conjunto de componentes de software que seja o mais fiel na sua representao deste domnio. *A distancia entre o mundo real e o modelo abstrato construdo 3 4. Eduardo Ricoldi Vantagens Quando, existem dois objetos semelhantes, pode-se escrever os mtodos apenas uma vez e us-los para os dois objetos. Apenas os mtodos que realmente forem diferentes para os dois objetos que precisam ser escritos individualmente. Permite que, quando for necessria alguma alterao, modifique-se apenas o objeto que necessita desta alterao, e ela propagar-se- automaticamente s demais partes do software que utilizam este objeto. 4 5. Eduardo Ricoldi O conceito A Orientao Objeto depende mais da mentalidade do programador do que da linguagem de programao que est sendo utilizada. O navio atraca no porto e descarrega sua carga. 5 6. Eduardo Ricoldi O conceito Em orientao objeto, o enfoque com que se encara a frase diferente: primeiro pensaramos no objeto navio, no objeto porto e no objeto carga, pensando como eles seriam e procurando definir seu comportamento. Aps isto que pensaremos em como o navio se relaciona com o porto e com a carga, e como o porto se relaciona com carga. De modo grosseiro, podemos dizer que ao analisarmos uma frase pensando estruturadamente, damos nfase aos verbos, e pensando orientado a objetos, damos nfase aos substantivos. 6 7. Eduardo Ricoldi O conceito Pratica: Encontrar os objetos e a aes das frases abaixo 1. Verifiquei a gua do radiador 2. Liguei para o 190 3. O Passageiro entra no taxi e depois paga a corrida 4. Os carros j esto na pista de corrida 5. De todas as caixas do armrio s tirei a vermelha 6. Coloquei as compras no carrinho, fui at o caixa e paguei a compra com o carto de credito 7 8. Eduardo Ricoldi A varivel e a memria Em linguagens de baixo nvel o programador tem obrigatoriamente a responsabilidade sobre a memria, em alguns casos at qual endereo fsico ser utilizado, o problema que nenhuma posio de memria se torna segura, j que qualquer programa pode acess-la e alterar seu valor, gerando uma inconsistncia de dados e muito provavelmente atitudes inesperadas por parte dos programas. Em uma linguagem de alto nvel uma varivel representada por um rotulo. 8 9. Eduardo Ricoldi A varivel e a memria Supondo que X possui quatro bytes e estivesse na posio E2 de memria. Cada posio de memria corresponde apenas a um byte e nossa varivel inteira ocupa quatro. Ou seja, o nmero 9 no vai estar representado numa nica posio de memria, mas sim em E2, E3, E4 e E5. Alis, aquilo que est nessas posies de memria a representao em binrio do nmero 9. Sendo assim uma varivel um nome que referencia uma poro de bytes. 9 10. Eduardo Ricoldi A varivel e a memria Uma varivel muda de tamanho de acordo com o tipo, seu contedo, o modo como o compilador representa esse tipo e como o processador os interpreta. 10 11. Eduardo Ricoldi A varivel e a memria Podemos dizer que blocos de informaes na memria sendo referenciados por rtulos so variveis, sendo assim uma representao mundo real seria um armrio de caixas rotuladas com informaes dentro. Se uma caixa um objeto no mundo real, ento uma varivel um objeto no mundo virtual. 11 12. Eduardo Ricoldi Mapa de objetos O mapa de objeto um conjunto de instrues que dizem ao compilador como o objeto e deve ser manipulado na memria (Escrito ou lido). Quando o compilador conhece nativamente o mapa do objeto este objeto pode ser chamado de primitivo caso seja somente uma representao direta de valor ou objeto caso possua mtodos e propriedades. 12 13. Eduardo Ricoldi Mapa de objetos Um exemplo de primitivo o tipo char, que tem uma representao direta na memria, o compilador sabe que ele uma massa binria com representao inteira. 13 14. Eduardo Ricoldi Mapa de objetos Um objeto comum dos compiladores de alto nvel do tipo String. Que possui alem do valor real propriedades e mtodos descritos em seu conjunto de instrues que podem ser chamados de Classe ou Templates. 14 15. Eduardo Ricoldi Mapa de objetos Abaixo um exemplo para um mapa de objetos do tipo String que simplesmente um tipo Texto. String { char[] letras; } Assim o compilador sabe que um objeto String deve ser quebrado em N objetos char e que objetos char so inteiros convertidos em binrio na memria. 15 16. Eduardo Ricoldi Mapa de objetos letras: [O][i] O 0100 1111 i 0110 1001 String Char Bytes 16 17. Eduardo Ricoldi Mapa de objetos Definiremos a partir de agora que o mapa de objetos ser chamado de Classe, sendo assim uma classe definida por: 1. Nome da classe 2. Nome da classe pai caso exista 3. Nome de seus atributos 4. Nomes e as definies de todas as operaes associadas a esta classe 17 18. Eduardo Ricoldi Mapa de objetos necessrio lembrar que um mapa de objeto (ou classe como definimos agora) s existe fora do programa em execuo, pois ele no alterado, excludo ou se cria um enquanto o programa esta rodando. Afinal caracterizamos um programa em execuo quando o mesmo esta alocando recursos (Memria, processador e etc...) o compilador roda o script da classe e cria o s objeto na memria com as informaes de seu mapa. 18 19. Eduardo Ricoldi Atributos So as propriedades de um objeto (tambm conhecidos como variveis do objeto). Atributos so, basicamente, as informaes que representam o objeto. Atributos de classe devem ser constantes para no fugir a regra de orientao a objetos. 19 20. Eduardo Ricoldi Atributos Na classe String de exemplo, o array de chars rotulado de letras, seria um atributo de nosso objeto. String { char[] letras; } 20 21. Eduardo Ricoldi Atributos Classe do tipo pessoa e alguns atributos. classe Pessoa{ String nome; int idade; } 21 22. Eduardo Ricoldi Atributos Pratica: Criar as classes abaixo com seus atributos 1. Taxista 2. Celular 3. Navio 4. Radiador 5. Porto classe Nome{ Tipo Rotulo1 Tipo Rotulo2 } 22 23. Eduardo Ricoldi Atributos Pratica: Criar as classes abaixo com seus atributos Navio classe Navio{ String nome int tamanho String carga int peso } 23 24. Eduardo Ricoldi Atributos Atributos podem ser de qualquer tipo, desde que respeite as regras de relacionamentos. Por exemplo um Navio transportando um carro: classe Navio{ Carro carga } classe Navio{ Carro[] carga } 24 25. Eduardo Ricoldi Atributos Pratica: 1. Criar uma classe Carro que leve 1 pessoa. 2. Criar uma classe navio que leve pessoas e carros. 25 26. Eduardo Ricoldi Atributos Pratica: 1. Criar uma classe navio que leve pessoas e carros. classe Navio { Pessoa[] pessoas Carro[] carros } 26 27. Eduardo Ricoldi Atributos Um programa escrito com orientao a objetos pode se tornar um labirinto de ramificaes quando um objeto possui outros objetos como atributos Carro Pessoa Classe Navio Bagagem Classe Carro Classe Pessoa Classe Bagagem Pessoa Bagagem Classe nibus 27 28. Eduardo Ricoldi Mtodos Mtodos so declarados dentro de uma classe para representar as operaes que os objetos pertencentes a esta classe podem executar. Um mtodo a implementao de uma rotina, ou seja, o cdigo propriamente dito. Pode ser comparado a um procedimento ou funo. 28 29. Eduardo Ricoldi Mtodos Mtodos so essencialmente procedimentos que podem manipular atributos de objetos para os quais o mtodo foi definido recebendo e retornando parmetros. Assinatura a primeira linha do mtodo onde o nome (um identificador vlido) e o tipo dos argumentos so definidos. 29 30. Eduardo Ricoldi Mtodos Exemplo: nome(argumentos) { corpo do mtodo } classe Pessoa{ String nome defineNome(String novoNome){ nome = novoNome } 30 31. Eduardo Ricoldi Mtodos O tipo um indicador do tipo de retorno do mtodo, que pode ser um dos tipos primitivos da linguagem, um tipo de objeto (nome de classe ou interface), ou vazio se no houver nenhum valor de retorno. 31 32. Eduardo Ricoldi Mtodos Exemplo: tipo nome(argumentos) { corpo do mtodo retorno } classe Pessoa{ String nome int defineNome(String novoNome){ nome = novoNome retorna 1 } 32 33. Eduardo Ricoldi Mtodos Pratica: 1. Criar os mtodos para definir e pegar os passageiros classe Carro{ Pessoa[] passageiros } 33 34. Eduardo Ricoldi Mtodos Pratica: 1. Criar os mtodos para definir e pegar os atributos classe Navio { Pessoa[] pessoas Carro[] carros } 34 35. Eduardo Ricoldi Mtodos Pratica: classe Navio { Pessoa[] pessoas Carro[] carros definePessoas(Pessoa[] novasPessoas){ pessoas = novasPessoas } defineCarros(Carro[] novosCarros){ carros = novosCarros } } 35 36. Eduardo Ricoldi Mtodos As funes de definir e resgatar valores de atributos so chamadas de modificadores de atributos, mas os mtodos no possuem somente esta serventia, eles executam aes que o objeto capaz de fazer. Uma classe Pessoa possui seus atributos, seus modificadores de atributos e suas aes. 36 37. Eduardo Ricoldi Mtodos Exemplo: Classe Pessoa{ String nome int idade defineNome(String nome) defineIdade(int idade) String pegaNome() int PegaIdade() andar() falar() comer() } 37 38. Eduardo Ricoldi Mtodos Pratica: Fazer atributos e mtodos em mapas de objetos escolhidos aleatoriamente. *No necessrio fazer os contedos dos mtodos 38 39. Eduardo Ricoldi Analisando o ambiente Um sistema para controle de estoque em uma farmcia. Defina seus objetos Defina os relacionamentos 39 40. Eduardo Ricoldi Usando seus objetos Quando o compilador encontra no seu cdigo uma instruo de que voc deseja criar uma varivel ele vai at o mapa de objetos referente ao tipo da varivel e aloca na memria o espao necessrio de acordo com os atributos, alem disso joga dentro do seu objeto os mtodos que o mapa de objetos diz que ele possui. 40 41. Eduardo Ricoldi Carregando objetos Criamos 2 variveis (Objetos) do tipo pessoa em um mtodo qualquer de outra classe: carregarPessoas(){ Pessoa pessoa1 Pessoa pessoa2 } 41 42. Eduardo Ricoldi Carregando objetos Olhando dentro da memria (em alto nvel): pessoa1 pessoa2 42 43. Eduardo Ricoldi Carregando objetos Como podemos ver nossos espaos de memria esto reservados mas o compilador no construiu o contedo de nossos objetos. Por isso ao tentarmos chamar o mtodo pegaNome() ira ocorrer um erro de objeto nulo, j que o objeto no possui seus atributos ou mtodos s por ter sido declarado. carregarPessoas(){ Pessoa pessoa1 pessoa1.pegaNome() = 1) e (numero 0) e (nNumero < 10){ numero = nNumero } int pegarNumero(){ return numero; } } 61 62. Eduardo Ricoldi Objetos teis classe Calculadora{ Numero num1 Numero num2 Calculadora(Numero novo1, Numero novo2){ num1 = novo1 num2 = novo2 } Numero somar(){ Numero resultado = nova Numero(numero1.pegarNumero() + numero2.pegarNumero()) return resultado } } 62 63. Eduardo Ricoldi Mensagens e relacionamentos O nome que damos a um objeto chamando um mtodo de outro objeto troca de mensagens. Ela esta embutida em um conceito chamado de Associao que o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associao simples tem-um" ou de um acoplamento -um". 63 64. Eduardo Ricoldi Mensagens e relacionamentos Um exemplo de relacionamento tem-um classe Calculadora{ Numero num1 } A classe Calculadora tem um objeto do tipo Numero. 64 65. Eduardo Ricoldi Mensagens e relacionamentos Um exemplo de relacionamento -um classe Computador estende Calculadora{ } A classe Computador parte de uma classe Calculadora ou seja computador tambm uma calculadora. o que chamamos normalmente de herana ou seja Computador herda de calculadora tudo que Calculadora diz que tem e capaz de fazer o que uma calculadora pode fazer. 65 66. Eduardo Ricoldi Herana o mecanismo pelo qual uma classe pode utilizar o mapa de objeto de outra classe, aproveitando seus comportamentos (mtodos) e possveis variveis (atributos). Com a herana podemos pegar objetos diferentes mas que possuem alguma semelhana e economizar trechos de cdigo fonte em um mapa de objetos. Ento o que acontece quando o compilador pega uma classe que herda de outra , juntar o mapa de objetos da super-classe e mescl-lo com da classe-filha. 66 67. Eduardo Ricoldi Herana classe Calculadora{ int num1 int num2 Calculadora(int novo1, int novo2){ num1 = novo1 num2 = novo2 } Numero somar(){} } classe Computador estende Calculadora{ jogar(){} } classe Main{ testaComputador(){ Computador pc = nova Computador(1,2) pc.somar() pc.jogar() } } 67 68. Eduardo Ricoldi Herana Int numero1 = 1 Int numero2 = 1 Calculadora somar() calculadora Olhando dentro da memria podemos ver que a super classe fica embutida na classe filha (sub-classe): computador jogar() 68 69. Eduardo Ricoldi Herana Em um objeto de uma classe com herana no possvel nem necessrio saber se o mtodo, atributo ou construtor do objeto dele mesmo ou herdado da classe pai. Mas para a prpria classe filha utilizar os recursos de sua classe pai necessrio o uso de uma palavra reservada tanto para acessar atributos, mtodos ou construtores. Aqui definiremos que a palavra reservada para acessar a super classe ser super 69 70. Eduardo Ricoldi Herana Portanto se estivermos dentro de uma classe e formos chamar o construtor da super classe faremos: classe Pai{ String parte1 Pai(String parte){ parte1 = parte } } classe Filha estende Pai{ String parte2 Filha(String nParte1, String nParte2){ super(nParte1) parte2 = nParte2 } } 70 71. Eduardo Ricoldi Herana Portanto se estivermos dentro de uma classe e formos chamar um mtodo da super classe faremos: classe Pai{ String parte1 String pegaParte1(){ retorna parte1 } } classe Filha estende Pai{ String parte2 String pegaPartes(){ String parte1 = super. pegaParte1() retorna parte1 + parte2 } } 71 72. Eduardo Ricoldi Herana Pratica: 1. Fazer uma classe Carro e uma Classe Conversvel. No necessrio fazer o contedo de mtodos (somente a assinatura) e o construtor. 72 73. Eduardo Ricoldi Herana Pratica: classe Carro{ String modelo int portas Carro(String nModelo, int nPortas){ modelo = nModelo portas = nPortas } acelerar() frear() } 73 74. Eduardo Ricoldi Herana Pratica: classe Conversivel estende Carro{ Conversivel (String nModelo, int nPortas){ super(nModelo, nPortas) } abaixarCapo(){} levantarCapo(){} } 74 75. Eduardo Ricoldi Herana Uma fabrica que constri e testa carros Exemplo: classe Fabrica{ criarTestar(){ Carro carango = nova Carro() carango.acelerar() } } 75 76. Eduardo Ricoldi Herana Exemplo: classe Fabrica{ criarTestar(){ Conversivel carango = nova Conversivel() carango.frear() carango.abrirCapo() } } 76 77. Eduardo Ricoldi Herana - Generalizao A herana um modo de generalizar dizendo que todos os objetos descendentes daquele tipo so algo ou fazem algo. Deixando o foco na ao que realmente interessa para o chamador. Por exemplo uma classe manobrista no precisa saber qual o modelo do carro e nem os recursos que diferencia um de outro, ele sabe que um carro e que possui os mtodos que ele precisa. 77 78. Eduardo Ricoldi Herana - Generalizao Exemplo: classe Manobrista{ estacionar(Carro odroga){ odroga.acelerar() odroga.frear() } } 78 79. Eduardo Ricoldi Herana - Generalizao Exemplo: classe Hotel{ Manobrista ze = nova Manobrista() estacionamento(){ ze.estacionar(fusca) ze.estacionar(gol) ze.estacionar(rollsroyce) ze.estacionar(hummer) ze.estacionar(cb500)