Você está na página 1de 9

Programao Orientada a Objeto

1 Classes
As classes representam o fundamento da orientao por objetos. Uma classe em C# funciona como uma estrutura,
onde podemos acrescentar no s campos mas tambm funes a uma estrutura. Isto permite "empacotarmos" uma
estrutura de dados junto como os procedimentos que iro manipular com esta estrutura. Por exemplo, se quisermos
criar uma estrutura de dados para armazenar um tringulo, as funes para desenhar, redimensionar, calcular
permetro, rea, etc. ficariam indistintamente associadas a estrutura de dados do tipo tringulo.
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 interpretado como uma estrututura
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.
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.
Uma classe definida por:
?
?
?
?

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;

Classe um conceito esttico: uma classe um elemento reconhecido num texto de programa. por outro lado, um
objeto um conceito puramente dinmico, o qual pertence no ao texto do programa, mas memria do
computador, local onde os objetos ocupam espao durante a execuo. (Conceitualmente, classes no so
necessrias durante a execuo, mas em linguagens interpretadas elas podem ser mantidas).
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.
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.
1.1 Definio
public class <Nome da classe>

{
<Visibilidade: public/ private/ protected>
<Visibilidade: public/ private/ protected>
< lista de atributos >
Construtor
<Visibilidade: public/ private/ protected>
< lista de declarao de mtodos >
}

Exemplo:
public class Aluno
{
//aqui vem os atributos
public Aluno(){}
//aqui vem os mtodos
}
1.1.1 Visibilidade
Cada "campo" da classe chamado de "membro" da classe. A rea de declarao de uma classe dividida em subreas determinadas pela sua visibilidade. A visibilidade determina se uma outra parte do programa que declare ou
utilize uma varivel do tipo da classe, ou Objeto da Classe vai ou no poder acessar seus membros, ou seja escrever
algo do tipo:
...
Aluno a;
a.media() - isto s possvel se "media()" for um membro pblico.
...
A Orientao por Objetos foi desenvolvida com a finalidade de melhor dividir e integrar o desenvolvimento de
sistemas. Num projeto grande, classes so desenvolvidas por uma equipe para serem utilizadas no cdigo
desenvolvido por outra equipe. Desta forma, a visibilidade permite a limitao de acesso da classe sendo
desenvolvida por uma equipe.
Pblica:
Todos os membros pblicos podem ser acessados a vontade pelo resto do programa. Geralmente as funes, ou
mtodos, so sempre pblicos.
Palavra chave: public:
Exemplo:

public class Aluno


{
private string nome;
private double nota1,nota2;
public double media()
{
return ((nota1 + nota1)/2);
}
static void Main()
{
double x;
Aluno a1 = new Aluno;
a1.nota1 = 4.5;
//Isto ir gerar um erro de compilao, pois nota1 no pblica.
x = a1.media();
}
}
Privada:
Quando nada for declarado no corpo de uma classe em C# os membros sero privados por default. Em geral
desejamos que os "campos", ou atributos de uma classe sejam privados, para impedir que outros usurios da classe
acessem os valores dos dados.
Palavra chave: private: ou, por default, qualquer membro privado. Como no podemos acessar diretamente os
"campos" da classe, cada vez que criamos uma nova varivel do tipo da classe precisamos ter algum mtodo para
poder alterar seus valores.
Exemplo:
public class Aluno
{
private string nome;
private double nota1,nota2;
public double Media()
{
return ((nota1 + nota1)/2);
}
public void Iniciar(double n1, double n2)
{
nota1=n1;
nota2=n2;
}

static void Main()


{
double x;
Aluno a1 = new Aluno;
a1.Iniciar(5,6); //Nota 1 e 2 so modificadas atravs de um mtodo pblico
x = a1.media();
}
}

Protegida:
A visibilidade protegida similar a privada, contudo permite que os atributos possam ser acessados pelos filhos da
classe(veja herana mais adiante).
Palavra chave: protected: - Passa a ser visvel para os filhos da classe

1.2 Objetos X Variveis


Cada vez que criamos uma "varivel do tipo da classe" dizemos que estamos criando um "objeto da classe". Estes
objetos podem ser estticos ou dinmicos, assim como qualquer varivel em C comum. A criao dinmica
obviamente necessita de uma "destruio" ou "apagamento" no final da utilizao daquele objeto no programa.
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:
? estado interno, uma memria interna em que valores podem ser armazenados e 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.
Por exemplo:

funcionais: gira em torno de processos

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 prximo 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.
Dentro de um objeto, alguns mtodos e/ou estrutura podem ser privados ao objeto, o que nos diz que so
inacessveis diretamente para qualquer elemento fora dele, o que impede que outros objetos tenham acesso direto s
partes privadas do objeto referenciado. Para o objeto poder referenciar seus elementos privados ele deve passar
pelos seus mtodos, neste caso um mtodo especfico que faa a operao desejada, ou seja, ele pode acessar sua
estrutura privada somente atravs de seus mtodos, dando assim uma certa abstrao de como feita a manipulao
da estrutura. Isso consiste no encapsulamento de dados que ser explicado na seo referente a este tema. A
princpio toda a estrutura deve ser privada, mas algumas linguagens como C++ permitem que a estrutura de um objeto
possa ser acessada diretamente por outros objetos. J em SmallTalk toda a estrutura privada. Dessa maneira, um
objeto evita significativamente que algumas outras partes no relacionadas de programa modifiquem ou usem
incorretamente as partes privadas do objeto referenciado, dando assim maior confiabilidade na manipulao do
objeto. Isso tudo nos mostra uma caracterstica muito grande para construo de mdulos independentes e abstrao
ao usurio.
Mais exatamente, cada objeto uma instncia de sua classe. a classe que contm a descrio da representao
interna e dos mtodos comuns a todas as suas instncias (objetos). Cada instncia da classe, por sua vez, possui sua
prpria memria privativa (seu estado interno) onde ficam armazenados os valores de seus componentes, que
representam suas caractersticas individuais.
1.2.1 Criao de um objeto
<Nome da classe><Nome do objeto> = new <construtor>
Aluno a1 = new Aluno()

1.3 Atributos
o nome dado aos "campos" da classe, ou seja variveis declaradas membros da classe. Sua visibilidade deve ser,
em geral, privada ou protegida, ocultando assim a estrutura dos dados da classe das partes do programa que utilizam
objetos da classe.
public class Aluno
{
string nome;
double nota1, nota2;
}
1.4 Mtodos

o nome das funes declaradas dentro da classe que iro manipular ou gerar resultados a partir dos atributos da
classe. As funes podem manipular livremente com quaisquer atributos da classe. Os atributos da classe pai(veja
herana) somente podem ser acessados se forem atributos protegidos. Os mtodos so invocados a partir de uma
varivel do tipo da classe.
1.4.1 Declarao
<Objeto da classe>.<Mtodo>;
Exemplo:
public double Media()
{
return ((nota1+nota2)/2;
}
static void Main(void)
{
double x;
Aluno a1 = new Aluno();
a1.Iniciar(5.7,8.7);
x = a1.Media();
Aluno a2 = new Aluno();
a2.Iniciar(3.4,8.9);
x = a2.Media();
}
1.4.2 Construtores
Os construtores so um "conforto" fornecido pela linguagem e pelo paradigma para que possamos "inicializar" nosso
objeto da classe. Podemos notar que nos exemplos acima nos utilizamos mtodos "iniciar" antes de comear a usar o
objeto com a finalidade, neste caso, de inicializar seus parmetros. A orientao objeto permite que criemos um
mtodo especial, denominado "construtor" que chamado automaticamente pelo programa no momento da
criao(ou declarao se preferir) do objeto. Em C++ O mtodo deve simplesmente ter o mesmo nome da classe.
Um classe pode ter muitos construtores, dependendo das formas de inicializao que desejarmos. Um construtor
pode inclusive no ter parmtros, sendo chamado de construtor default. Ele pode ser utilizado, por exemplo, somente
para zerar o valor de atributos da classe. A nica restrio que quando criamos vetores de objetos, no podemos
passar parmetros para os construtores, somente sero chamados construtores sem parmetros, ou default.
Exemplos:
Aluno a1;
a1.Iniciar(5.7,8.7);
Passa a ser...
Aluno a1 = new Aluno(5.7,8.7)

Exemplo de construtor default:


Declarao:
public class <Nome da classe>
{
public <Nome da classe>(parmetros)
{
Inicializao de atributos, Alocar memria,abrir arquivos, mensagens
de tela,etc...
{
}
2 Herana
A herana o mecanismo que permite a reutilizao dos mtodos e atributos implementados numa classe numa outra.
A classe que "herda" os mtodos e atributos chamada tambm de classe filha e a classe da qual ela herda
chamada de classe pai. Tomando como exemplo um clculo de imposto de renda, existem vrios clculos que podem
ser feitos tanto para pessoa fsica quanto para pessoa jurdica. Podemos definir uma classe pessoa criar classes
pessoa jurdica ou pessoa fsica como heranas de pessoa. Todos os mtodos declarados para a classe pessoa
passam a pertencer tambm a pessoa fsica e juridica.
2.1 Declarao
A herana pode ser pblica ou privada, se ela for pblica (veja a declarao [public] abaixo, significa que os mtodos
que eram pblicos na classe pai tambm o so na classe filha, no caso contrrio, a classe filha pode acessar os
mtodos da classe pai dentro de seus mtodos mas um "usurio" ou alguem usando um objeto da class filha no
poderia acessar os mtodos da classe pai.
Exemplo:
class Aluno{
string nome;
protected double nota1,nota2;
}
class AlunoFaculdade:Aluno
{
string ProjetoFinal;
double NotaPF;
public void AlteraNome(string n);
public double CalculaNota();
}
2.3 Visibilidade: protected
A principio, uma classe filho no pode ler ou alterar os valores dos atributos da sua classe pai se eles forem privados.
Para que isso seja possvel necessrio declara- los como protegidos. A razo disso tambm a integrao e diviso

de projeto. Existem casos onde uma equipe vai desenvolver as classes pai e a outra que vai desenvolver as filhas.
Desta forma, os atributos s podero ser acessados nas classes filhas atravs dos mtodos da classe pai.
3 Associaes
Uma associao quando uma classe est ligada ou contm objetos de outras classes. Suponha, por exemplo, que
uma classe Automvel contenha dentro dela uma classe Proprietrio. Dentro de um sistema grande a classe
proprietrio pode ser utilizada tanto para o automvel quanto para uma Casa, por exemplo. As associaes podem
ser de 1 para 1, de 1 para muitos ou de muitos para muitos. Uma ligao de 1 para 1 seria a citada acima, de
automvel-proprietrio. Uma associao de 1 para muitos quando uma classe possui uma lista de objetos de uma
outra classe. Uma classe Avio, por exemplo, poderia conter uma lista(ou vetor) de objetos da classe Passageiro.
Existem vrias formas de associao:
3.1 Agregao
quando a classe "possui" realmente os objetos que agrega. Na prtica, a classe agregadora passa a ficar
responsvel pela criao e destruio destes objetos. Suponha que voc crie dinmicamente vrios objetos da classe
Aluno e agregue numa classe Escola. O destrutor desta classe tem que se encarregar de "deletar" todos os objetos da
classe Aluno criados.
3.2 Agregao por Composio
Este tipo de agregao usado quando usamos criao esttica dos objetos que sero agregados. A diferena que
nesse caso, os objetos sero criados no mesmo momento que o objeto da classe agregadora, enquanto que a
agregao "comum" a criao dinmica feita aps a criaao da classe agregadora.
3.3 Associao
As Associaes, chamadas simplesmente assim, so na prtica referncias de uma classe para objetos de outra
classe. Neste caso sempre utilizamos ponteiros ou listas encadeadas de ponteiros, etc. As classes que referenciam
umas as outras no tem responsabilidade sobre si, ou seja, no so elas que criam os objetos e nem as responsveis
pela sua destruio.
4 Polimorfismo
O polimorfismo a caracterstica mais complexa e ao mesmo tempo a mais poderosa da Orientao por Objetos. Ela
permite que tratemos vrias classes diferentes de uma forma generalizada, como se ela fosse uma mesma classe. O
processo consiste em criar vrias heranas de uma mesma classe e tratar todos os objetos das classe-filhas como se
elas fossem da classe pai. Tomemos como exemplo uma classe Janela do windows. Ao desejarmos criar um novo
tipo de janela especfica, do tipo WORD, por exemplo, fazemos uma herana da classe Janela. Prosseguindo,
poderamos criar heranas de Janela para cada tipo de aplicao que estivssemos desenvolvendo. Bem, como o
Windows faria para gerenciar o desenho de tantos tipos de Janelas, algumas que ainda nem foram criadas? O segredo
est no poliforfismo. A classe Janela inicial contm alguns mtodos chamados de Mtodos Virtuais, que no fazem
nada mas servem como um padro para todas as filhas da classe Janela. Quando criamos uma herana da classe
Janela, devemos obrigatriamente redefinir os mtodos Virtuais adequando-os para o nosso tipo de janela. Se
criarmos, por exemplo, uma JanelaImagem, redefinimos o mtodo Desenha da Janela Pai para que ele, no caso da
classe JanelaImagem, desenhe uma imagem desejada. O que o Windows faz, aps isto, guardar uma lista de Janelas
e trat-las como se elas fossem apenas Janela, ignorando suas heranas. Quando o Windows tem que redesenhar as
janelas ele vai em todas elas e chama o mtodo virtual Desenha. O sistema automticamente verifica qual a herana
que realmente est ali e chama o mtodo da classe filha adequado.

Você também pode gostar