Anda di halaman 1dari 10

Conceitos

Programao orientada a objeto:

Programao Orientada a Objetos a programao implementada pelo envio de mensagens a objetos. Cada objeto ir responder s mensagens conhecidas por este, e cada objeto poder enviar mensagens a outros, para que sejam atendidas, de maneira que ao final do programa, todas as mensagens enviadas foram respondidas, atingindo -se o objetivo do programa. Programao Orientada a Objetos, tcnicas e artefatos ditos orientados a objetos incluem linguagens, sistemas, interfaces, ambientes de desenvolvimento, bases de dados, etc.
Classes

Classe o termo tcnico utilizado em linguagens orientadas a objetos que descreve um conjunto de dados estruturados que so caracterizados por propriedades comuns. Tambm pode ser interpr etado como uma estrutura modular completa que descreve as propriedades estticas e dinmicas dos elementos manipulados pelo programa. Pode-se definir classes de objetos como a descrio de um grupo de objetos por meio de um conjunto uniforme de atributos e servios. Uma classe um conjunto de objetos que compartilham as mesmas operaes. Outro conceito:
Uma classe uma abstrao que define um tipo de objeto e o que objetos deste determinado tipo tem dentro deles (seus atributos) e tambm define que tipo de aes esse tipo de objeto capaz de realizar (mtodos).

Enquanto um objeto individual uma entidade concreta que executa algum papel no sistema como um todo, uma classe captura a estrutura e o comportamento comum a todos os objetos que so relacionados. Um objeto possui uma identidade e suas caractersticas sero definidas para a classe. Outro conceito:
Tente pensar no conceito de Classes utilizado na Biologia: um animal uma classe, e tem suas caractersticas: um ser vivo capaz de pensar, precisa se alimentar para viver, etc, etc. O Ser Humano uma sub-classe dos animais. Ele tem todas as caractersticas de um animal, mas tambm tem algumas peculiaridades suas, no encontradas nas outras sub-classes de animais. Os pssaros tambm so animais, mas possuem caractersticas prprias.

Uma classe definida por:


y y y

um nome da classe; o nome da sua superclasse; o nome de suas variveis privadas;

os nomes e as definies de todas as operaes associadas a esta classe;

Note que uma Classe no tem vida, s um conceito. Mas os Objetos (animais, serem humanos, pssaros, etc) possuem vida. O seu cachorro rex um Objeto (ou instncia) da classe Cachorro. A classe Cachorro no pode latir, no pode fazer xixi no poste, ela apenas especifica e define o que um cachorro. Mas Objetos do tipo Cachorro , estes sim podem latir, enterrar ossos, ter um nome prprio, etc. Note que uma Classe no tem vida, s um conceito. Mas os Objetos (animais, serem humanos, pssaros, etc) possuem vida. O seu cachorro rex um Objeto (ou instncia) da classe Cachorro. A classe Cachorro no pode latir, no pode fazer xixi no poste, ela apenas especifica e define o que um cachorro. Mas Objetos do tipo Cachorro , estes sim podem latir, enterrar ossos, ter um nome prprio, etc.
ATRIBUTOS

Um atributo um dado para o qual cada objeto tem seu prprio valor. Atributos so, basicamente, a estrutura de dados que vai representar a classe. A criao de uma nova Classe dividida em duas partes: os seus atributos e os seus mtodos . Os atributos so variveis que estaro dentro de cada um dos objetos desta classe, e podem ser de qualquer tipo. Por exemplo, a classe Cachorro poder ter o atributo nome que ser do tipo String. Assim, cada Objeto desta classe ter uma varivel prpria chamada nome, que poder ter um valor qualquer (Rex, Frodo, Atila, ...).
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 das linguagens imperativas. Outro conceito:
Mtodos sero as aes que a Classe poder realizar. Quando um objeto desta classe receber uma mensagem de algum outro objeto contendo o nome de um mtodo, a ao correspondente a este mtodo ser executada. Por exemplo, caso um objeto da classe Dono envie uma mensagem para um objeto do tipo Cachorro falando "sente", o cachorro ir interpretar esta mensagem e conseqentemente ir executar todas as instrues que foram especificadas na classe Cachorro dentro do mtodo sente.

OBJETOS

O que caracteriza a programao orientada a objetos so os objetos. De um modo geral podemos encarar os objetos como sendo os objetos fsicos do mundo real, tal como: Carro, avio, cachorro, casa, telefone, computador, etc., por isso que s vezes dito que orientao a objetos representa os problemas mais prximo ao mundo real, dando assim mais facilidade a programao como um todo, mais isso no sempre verdade, porque s vezes temos problemas que so extremamente funcionais1. Nesses problemas funcionais difcil representar a estrutura lgica em torno de objetos. Com isso, no so todos os problemas que giram em torno dos objetos facilmente visveis.
De maneira simples, um objeto uma entidade lgica que contm dados e cdigo para manipular esses dados. Os dados so denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o cdigo que o manipula denominamos mtodo. Um mtodo uma funo que manipula a estrutura de dados do objeto.

Um objeto um ente independente, composto por:


y y

Estado interno, uma memria interna em que valores podem ser armazenados modificados ao longo da vida do objeto. Comportamento, um conjunto de aes pr -definidas (mtodos), atravs das quais o objeto responder a demanda de processamento por parte de outros objetos.

Exemplos

Uma tela de computador pode ter os seguintes atributos e mtodos: atributos modo de operao /* texto/grfico */ tamanho horizontal tamanho vertical paleta de cores cor atual mtodos modo texto ( ) modo grfico ( ) fecha modo grfico ( ) muda cor ( ) escreve caracter ( ) coloca pixel ( ) muda dimenses (x,y) ...

Um guarda-roupa: estrutura conjunto de roupas /* tipo, tamanho, cor, estilo, preo, etc. */ portas nmero de portas capacidade mxima mtodos abre porta ( ) fecha porta ( ) escolhe roupa ( ) tira roupa ( ) coloca roupa ( ) estado do guarda-roupa ( ) /* portas abertas e fechadas, quantidade de roupas, etc. */ ... Uma lista: estrutura (nodo e um apontador para um prximo nodo) Primeiro e atual mtodos cria lista ( ) /* cria clula cabea e inicializa */ prximo ( ) /*vai para o pr ximo elemento da lista */ insere ( ) /* insere um elemento na posio atual */ deleta ( ) /* apaga posio atual */ volta ao comeo ( ) /* atual = primeiro */ ... Podemos notar que um objeto composto por estrutura e processos, onde esses processos giram em torno da estrutura, ao contrrio das linguagens funcionais, nas quais a estrutura se adapta a funo. Um objeto s pode ser manipulado por sua estrutura e seus mtodos, nada mais do que isso.
Somente um objeto de um determinado tipo pode acessar seus mtodos e estrutura, um outro tipo de objeto no tem nenhum acesso a estes. Por exemplo, em uma classe cachorro temos o mtodo fala. Se por exemplo definirmos um objeto da classe gato, este objeto no tem acesso nenhum ao mtodo fala de cachorro.

Exemplo do Joozinho:

Pessoa joao := new Pessoa( "Joo", 13 ); Este cdigo gera um novo objeto chamado joao que do tipo Pessoa e contem os valores "Joo" como nome e 13 como idade. Caso voc tenha entendido o texto acima, voc entendeu 99% do que esta por trs da orientao a objetos. O mais importante entender como funciona a comunicao entre os objetos, que sempre segue o seguinte fluxo:

y y

Um objeto A envia uma mensagem para o objeto B. Objeto B verifica qual foi a mensagem que recebeu e executa sua ao correspondente. Esta ao est descrita no mtodo que corresponde a mensagem recebida, e est dentro da Classe a qual este objeto pertence.

Exemplo
Voc est desenvolvendo um software para uma locadora. Esta locador a ter diversos clientes. Podermos ento criar uma classe explicando para o computador o que um Cliente: para isso precisaramos criar uma classe chamada Cliente, e com as seguintes caractersticas (atributos):
y y y

Nome Data de Nascimento Profisso

Mas um cliente mais do que simples dados. Ele pode realizar aes! E no mundo da POO, aes so descritas atravs da criao de mtodos. Dessa forma, objetos da nossa classe Cliente poder por exemplo executar as seguintes aes (mtodos):
y y y

AlugarFilme DevolverFilme ReservarFilme

Note o tempo verbal empregado ao descrever os mtodos. Fica fcil perceber que trata-se de aes que um Cliente pode realizar. muito importante perceber as diferenas entre Atributo e Mtodo. No comeo normal ficar um pouco confuso, mas tenha sempre em mente:
y y

Atributos so dados. Mtodos descrevem possveis aes que os objetos so capazes de realizar.

Assim, nosso sistema pode ter vrios Objetos do tipo Cliente. Cada um destes objetos possuir seu prprio nome, data de nascimento e p rofisso, e todos eles podero realizar as mesmas aes (AlugarFilme, RevolverFilme ou ReservarFilme).
MENSAGENS

Mensagens so requisies para que um objeto execute uma de suas aes. Cada objeto somente pode responder s mensagens que constem do seu protocolo. O protocolo de um objeto so as mensagens correspondentes as suas operaes, alm do protocolo de sua superclasse.

Os objetos interagem atravs de mensagens.O atendimento de uma mensagem envolve a execuo de algum tipo de cdigo, ou seja, os mtodos, sobre um dado associado quela operao, ou seja, sobre os atributos. Quando um objeto criado, o acesso a suas caractersticas feito atravs de mensagens. Para cada mensagem recebida pelo objeto, existe um mtodo associado para respond-la. Quando a mensagem estiver se referenciando a um atributo, o valor deste deve ser devolvido, e no caso de uma operao, o procedimento desta executado. As operaes podem ter parmetros de entrada e sada com tipos determinados. Esta caracterstica, juntamente com o seu nome, definem a assinatura de uma mensagem. Exemplo de mensagem, utilizando a classe fila: seja a declarao de um objeto: fila fila_atual; A mensagem a este objeto seria: fila_atual.get( );
Herana

Voltando a idia das classes na Biologia: um ser humano um animal. Ele tem todas as caractersticas (atributos) e pode realizar todas as aes (mtodos) de um animal. Mas, alm disso, ele tem algumas caractersticas e aes que s ele pode realizar. Coad-Yourdon define Herana como:
Mecanismo para expressar a similaridade entre classes, simplificando a definio de Classes similares a outras que j foram definidas. Ela representa generalizao e especializao, tornando atributos e servios comuns em uma hierarquia de Classe.

Em momentos como este, utilizado a herana. Uma classe pode estender todas as caractersticas de outra e adicionar algumas coisas a mais. Desta forma, a classe SerHumano ser uma especializao (ou subclasse ) da classe Animal. A classe Animal seria a classe pai da serHumano, e logicamente, a classe SerHumano seria a classe filha da Animal. Uma classe pode sempre ter vrios filhos, mas normalmente as linguagens de programao orientadas a objetos exigem que cada classe filha tenha apenas uma classe pai. A linguagem C++ permite que uma classe herde as caractersticas de varias classes (herana mltipla), mas C++ no um bom exemplo quando se est falando sobre conceitos de POO.

Um exemplo um pouco mais prximo da nossa realidade: vamos supor que estamos desenvolvendo um sistema para um banco. Nosso banco possui clientes que so pessoas fsicas e pessoas jurdicas. Poderiamos criar uma classe chamada Pessoa com os seguintes atributos:
y y

Nome Idade

Em seguida, criamos 2 classes que so filhas da classe Pessoa, chamadas PessoaFisica e PessoaJuridica . Tanto a classe PessoaFisia como a PessoaJuridica herdariam os atributos da classe Pessoa, mas poderiam ter alguns atributos a mais. A classe PessoaFisica pode ter por exemplo o atributo RG enquanto a classe PessoaJuridica poderia ter o atributo CNPJ. Dessa forma, todos os objeto da classe PessoaFisica ter como atributos:
y y y

Nome Idade RG

E todos os objetos da classe PessoaJuridica tero os seguintes atributos:


y y y

Nome Idade CNPJ

Os mtodos so anlogos: poderamos criar alguns mtodos na classe Pessoa e criar mais alguns mtodos nas classes PessoaJuridica e PessoaFisica. No final, todos os objetos teriam os mtodos especificados na classe Pessoa, mas s os objetos do tipo PessoaJuridica teriam os mtodos especificados dentro da classe PessoaJuridica, e objetos do tipo PessoaFisica teriam os mtodos especificados na classe PessoaFisica.
ENCAPSULAMENTO

O conceito de encapsulamento decorrente do fato de se combinar os dados (atributos) e o cdigo que manipula estes dados (mtodos) em um nico Objeto. Ele garante que a nica forma de acesso aos dados atravs dos mtodos disponveis ao usurio (chamados pblicos). Os demais mtodos e os atributos da classe ficam sendo privado s, ou seja, apenas funes-membro da classe tm acesso direto aos mesmos.

O conceito de encapsulamento no exclusivo do paradigma de Orientao a Objetos. Ele j era utilizado na definio de Tipos Abstratos de Dados, para dizer que os dados s deveriam ser manipulados pelas funes que compunham o TAD.
Encapsulamento diz respeito definio de uma estrutura que contenha os dados, defina quais os mtodos de acesso pblico a esses dados e possua meios de proteger os demais mtodos e os dados contra acesso direto.

Mas... por que impedir este acesso? Responderemos esta pergunta com um exemplo prtico. Imaginemos um objeto Polinmio. Vamos supor que a estrutura de dados utilizada para representar um polinmio dentro do objeto seja um vetor. Este objeto, quando criado, recebe um string contendo o polinmio que ele representar (por exemplo, x2 + 2x +10) e possui, entre outros, um mtodo para, dado um x, calcular f(x). typedef struct{ float coeficiente; int expoente; } termo; class polinmio{ termo Vetor[30]; public: polinomio(char *string); ~polinomio ( ) { }; void insere (float coef, int exp); ... float calcula_fx (float x); } Digamos que o encapsulamento no existe e eu no tenho este m todo, mas eu estou fazendo uma aplicao que usa a classe polinmio, e preciso calcular f(x). Eu posso ento acessar diretamente o vetor dentro do objeto, obter o coeficiente e expoente de cada termo do polinmio e calcular f(x) sem mais problemas, no posso? Pode.

Mas um belo dia voc chega brilhante concluso que um vetor no a maneira mais econmica (em se tratando de memria) de se representar um polinmio, e resolve alterar a estrutura de dados para uma lista. E agora, o que aconteceu com o cdig o para calcular f(x)? Bem, voc ter que implementar praticamente tudo de novo, s que agora com lista. E assim seria se a estrutura de dados fosse mudada de novo, e de novo, e de novo... Agora vejamos o que acontece no mesmo objeto polinmio, mas agora c om encapsulamento: A minha aplicao chama o mtodo da classe calcula_fx e obtm o resultado desejado. Se eu mudar a estrutura de dados do objeto, precisarei fazer mudanas neste mtodo, para que ele opere corretamente. MAS... a minha aplicao no mudou em nada!!! Isto quer dizer que se eu modificar o objeto sem alterar a interface dos meus mtodos de acesso, no precisarei mudar uma linha na minha aplicao para que ela funcione corretamente. Isso s ser possvel se eu sempre acessar os dados atravs dos mtodos da classe, e nunca diretamente. claro que no sempre que eu consigo preservar a interface de um objeto quando da mudana da estrutura de dados, e s vezes a minha aplicao tambm precisar ser modificada. Entretanto, o Encapsulamento facilita estas mudanas, que no precisaro ser to drsticas quanto no exemplo sem a aplicao deste conceito. Alm desse aspecto, ainda h o da proteo dos dados encapsulados. Restringir o acesso dos atributos aos mtodos da classe garante que nenhum dado ser alterado por engano ou de forma descontrolada. Por exemplo, se a lista do meu objeto polinmio fosse acessvel minha aplicao, nada impediria que eu, por engano, mudasse um apontador da mesma e perdesse algum dado. O encapsulamento protege os dados, e faz o uso do objeto ser mais seguro. Em outras palavras, o Encapsulamento garante que a minha classe seja uma caixinha preta para o usurio: ele no sabe o que h dentro do objeto, sabe apenas para que ele serve e quais os mtodos disponveis para a manipulao deste.Note-se que este conceito possui efeito contrrio para um objeto mal definido. Se, ao projetarmos uma classe, no fornecemos mtodos de acesso adequados, teremos dificuldades em criar aplicaes eficientes com objetos instanciados da mesma. Por exemplo, a nossaclasse polinmio deveria possuir um mtodo para informar se um termo de ordem n est presente no objeto. Caso contrrio, fica difcil, por exemplo, implementar uma aplicao que compare dois polinmios e diga se possuem todos os termos de ordens iguais : ( ex.: x2 + 2 e 3x2 + 5).

Logo, a tarefa de projetar uma classe envolve, entre outras atividades, definir da melhor maneira possvel quais mtodos de acesso ao objeto sero disponibilizados ao usurio. Um bom projeto inicial evita a necessidade de se redefinir uma classe j implementada.
POLIMORFISMO

Polimorfismo a propriedade de uma ou mais classes responderem a mesma mensagem, cada uma de uma forma diferente. Numa linguagem orientada a objeto, uma referncia polimrfica tal que, no decorrer do desenvolvimento do software, refere-se a mais de uma classe. Desta forma possvel explorar similaridades entre diferentes classes de objetos. Este conceito til para distinguir mensagens de um mtodo. Um objeto emissor envia uma mensagem, se o objeto receptor implementa um mtodo com a mesma assinatura, ele poder respond-la. Diferentes respostas sero possveis, dependendo de como os mtodos dos receptores esto implementados.
Desta forma, a mensagem "fale" enviada a um objeto da classe Animal pode ser interpretada de formas diferentes, dependendo do objeto em questo. Para que isto ocorra, preciso que duas condies sejam satisfeitas: exista herana de uma classe abstrata e casting (outras situaes tambm podem resultar em polimorfismo, mas vamos nos centrar neste caso).