~~SLIDESHOW~~ ====== Características das Linguagens de Programação ====== ==== Introdução a POO ==== === Programação Orientada a Objetos === Por João Araujo. =====Introdução===== Apresentação baseada no texto da página: [[http://www.criarweb.com/artigos/215.php|CriaWeb]] de Miguel Angel Alvarez =====O que é POO?===== A programação Orientada a objetos (POO) é uma forma especial de programar, mais próximo de como expressaríamos as coisas na vida real do que outros tipos de programação. =====Pensar Coisas===== Com a POO temos que aprender a pensar as coisas de uma maneira distinta, para escrever nossos programas em termos de **objetos**, **propriedades**, **métodos** e outras coisas que veremos rapidamente para esclarecer conceitos e dar uma pequena base que permita soltarmos um pouco com este tipo de programação. =====Motivação===== Durante anos, os programadores se dedicaram a construir aplicações muito parecidas que resolviam uma vez ou outra, os mesmo problemas. =====POO é Reutilização de Código===== * Para conseguir que os esforços dos programadores possam ser utilizados por outras pessoas foi criado a POO. < * Esta é uma série de normas de realizar as coisas de maneira com que outras pessoas possam utilizá-las e adiantar seu trabalho, de maneira que consigamos que o código possa ser reutilizado. < =====Difícil???===== * A POO não é difícil, mas é uma forma especial de pensar, às vezes subjetiva de quem a programa, de forma que a maneira de fazer as coisas possa ser diferente segundo o programador. * Embora possamos fazer os programas de formas distintas, nem todas elas são corretas. < =====Programar e Programar Bem===== * O difícil não é programar orientado a objetos e sim, **programar bem**. < * Programar bem é importante porque assim podemos aproveitar todas as vantagens da POO. < =====Como se pensa em objetos===== Pensar em termos de objetos é muito parecido a como faríamos na vida real. Por exemplo, vamos pensar em um carro para dar um modelo em um esquema de POO. =====Um carro tem características===== Diríamos que o carro é o elemento principal que tem uma série de características, como poderiam ser... =====a cor===== {{:carac:carro_gay.jpg|}} =====o modelo===== {{:carac:old-automotive.jpg|}} =====ou a marca===== {{:carac:carro_motoboy.jpg|}} =====Um carro tem funcionalidades===== Ademais tem uma série de funcionalidades associadas, como podem ser ... ===== andar ===== {{:carac:carro_menor.jpg|}} ===== parar ===== {{:carac:carro_anti_furto.jpg|}} ===== ou estacionar ===== {{:carac:car-bed.jpg|}} =====O que é Objeto???===== Então em um esquema **POO** o carro seria o **objeto**, as propriedades seriam as características como a cor ou o modelo e os métodos seriam as **funcionalidades** associadas como andar ou parar. ===== Uma fração como objeto ===== Para dar outro exemplo, vamos ver como faríamos um modelo em um esquema POO de uma fração, ou seja, essa estrutura matemática que tem um numerador e um denominador que divide ao numerador, por exemplo, **3/2** ===== Métodos ===== A fração será o objeto e terá duas propriedades, o **numerador** e o **denominador**. Logo, poderia ter vários **métodos** como simplificar, somar com outra fração ou número, subtrair com outra fração, etc. ===== Como Usar? ===== Estes objetos poderão ser utilizados nos programas, por exemplo, em um programa de **matemáticas** seria feito o uso de **objetos fração** e em um programa que providencie uma **oficina de carros**, seria utilizado o uso de **objeto carro**. ===== Muitos objetos para um programa ===== Os programas Orientados a objetos utilizam muitos objetos para realizar as ações que se desejam realizar e eles mesmos também são objetos. Ou seja, a oficina de carros será um objeto que utilizará objetos carro, ferramenta, mecânico, trocas, etc. ===== Um Objeto é... ===== Composto de um comportamento e de um estado. {{:carac:objeto.png|}} ===== Objeto Bicicleta ===== {{:carac:objeto1.png|}} =====Classes em POO===== As classes são declarações de objetos, também se poderiam definir como abstrações de objetos. ===== Objetos e Classes ===== * Por exemplo: João é um objeto da classe pessoa. * João é concreto, pessoa é uma abstração. < ===== Programamos Classes ===== Isto quer dizer que a definição de um objeto é a classe. Quando programamos um objeto e definimos suas características e funcionalidades na verdade o que estamos fazendo é programar uma classe. Nos exemplos anteriores, na verdade falávamos das classes carro ou fração porque somente estivemos definindo, embora por alto, suas formas. =====Propriedades em classes===== As propriedades ou atributos são as características dos objetos. Quando definimos uma propriedade normalmente especificamos seu nome e seu tipo. Podemos ter a idéia de que as propriedades são algo assim como as variáveis onde armazenamos os dados relacionados com os objetos. =====Métodos nas classes===== São as funcionalidades associadas aos objetos. Quando estamos programando as classes as chamamos de métodos. Os métodos são como funções que estão associadas a um objeto. ===== Exemplo ===== {{:carac:objeto2.png|}} =====Objetos em POO===== Os objetos são exemplares de uma classe qualquer. Quando criamos um exemplar temos que especificar a classe a partir da qual se criará. Esta ação de criar um objeto a partir de uma classe se chama instance (que significa em inglês exemplificar). ===== Exemplo ===== Por exemplo, um objeto da **classe** fração é por exemplo, **3/5**. O conceito ou definição de fração seria a classe, mas quando já estávamos falando de uma fração em concreto **4/7**, **8/1000** ou qualquer outra a chamamos de **objeto**. ===== Criar objetos ===== Para criar um objeto temos que escrever uma instrução especial que possa ser distinta dependendo da linguagem de programação que se empregue, mas será algo parecido a isto. **meuCarro = new Carro()** Com a palavra new especificamos que se tem que criar uma instance da classe que continua a seguir. Dentro dos parênteses poderíamos colocar parâmetros com os quais se inicia o objeto da classe carro. =====Estados em objetos===== Quando temos um objeto suas propriedades tomam **valores**. Por exemplo, quando temos um carro a propriedade cor tomará um valor em concreto, como por exemplo, vermelho, cinza. O valor concreto de uma propriedade de um objeto se chama estado. ===== Operador ponto ===== Para acessar a um estado de um objeto para ver seu valor ou mudá-lo se utiliza o operador ponto. **meuCarro.cor = vermelho** O objeto é meuCarro, logo colocamos o operador ponto e por último o nome da propriedade a qual desejamos acessar. Neste exemplo, estamos mudando o valor do estado da propriedade do objeto a vermelho com uma simples atribuição. =====Mensagens em objetos===== Uma mensagem em um objeto é a ação de efetuar uma chamada a um método. Por exemplo, quando dizemos a um objeto carro para andar, estamos lhe passando a mensagem "ande". ===== Enviando Mensagens ===== Para mandar mensagens aos objetos utilizamos o operador ponto, seguido do método que desejamos utilizar. **meuCarro.andar()** Neste exemplo, passamos a mensagem andar(). Deve-se colocar parênteses assim como com qualquer chamada a uma função, dentro iriam os parâmetros. ===== Encapsulamento ===== é o processo de ocultar todos os detalhes de um objeto que não contribuem para as suas características essenciais ===== Encapsulamento protege ===== O encapsulamento impede os clientes de terem uma visão interna dos objetos. Trata-se de uma barreira efetiva entre diferentes abstrações. ===== Interface ===== Os atributos de um objeto são acessíveis apenas por meio dos métodos da classe. =====Herança===== A herança serve para criar objetos que incorporem propriedades e métodos de outros objetos. Assim, poderemos construir uns objetos a partir de outros sem ter que reescrevê-lo todo. {{:carac:objeto3.png|}} ===== Herança define relação ===== Herança define uma relação entre classes, em que uma classe compartilha a estrutura e o comportamento definido em uma ou mais classes (herança simples e herança múltipla, respectivamente). ===== Exemplo ===== {{:carac:objeto4.png|}} ===== Polimorfismo ===== O polimorfismo serve para que não tenhamos que nos preocupar sobre o que estamos trabalhando, e abstrairmos para definir um código que seja compatível com objetos de vários tipos. ===== Polimorfismo é um mecanismo===== É um mecanismo que permite que diferentes operações (métodos, serviços ou funções) sobre objetos de diferentes tipos tenham o mesmo nome {{:carac:objeto5.png|}} ===== Consequências ===== Isto significa que um objeto pode enviar uma mensagem para outro objeto sem necessariamente saber (ou preocupar-se) a que classe o outro objeto pertence. ===== Linguagens ===== **Simula**(1967) é a primeira linguagem de programação orientada a objetos. ===== Melhor suporte ===== **Smalltalk (1972 to 1980)** é a linguagem que foi mais longe no suporte ao paradgma da POO. =====Linguagens "Puras" ===== * Tudo é tratado como objeto. * Exemplos: Smalltalk, Eiffel, Ruby, JADE < ===== Projetadas principalmente ===== * Linguagens projetadas principalmente para OO, mas com elementos procedurais. * C++, Java, Python. < ===== Estendidas ===== * Historicamente são linguagens procedurais, mas foram estendidas com alguma características OO. * Fortran 2003, Perl, COBOL 2002. < ===== Formato particular ===== * Linguagens com características OO, mas em formato particular. * Oberon (Oberon-1 or Oberon-2). < ===== Baseadas em Objetos ===== * Linguagens com suporte aos tipos abstratos, mas sem todas as características da OO * Modula-2 (com um excelente encapsulamento e ocultação de informação), Pliant, CLU. < ===== FIM =====