Buscar

Conceitos de Orientação a Objeto

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 9 páginas

Prévia do material em texto

Programação Orientada a Objeto 
 
 
1 Classes 
As classes representam o fundamento da orientação por objetos. Uma classe em C# funciona como uma estrutura, 
onde podemos acrescentar não só campos mas também funções a uma estrutura. Isto permite "empacotarmos" uma 
estrutura de dados junto como os procedimentos que irão manipular com esta estrutura. Por exemplo, se quisermos 
criar uma estrutura de dados para armazenar um triângulo, as funções para desenhar, redimensionar, calcular 
perímetro, área, etc. ficariam indistintamente associadas a estrutura de dados do tipo triângulo. 
 
Classe é o termo técnico utilizado em linguagens orientadas a objetos que descreve um conjunto de dados 
estruturados que são caracterizados por propriedades comuns. Também pode ser interpretado como uma estrututura 
modular completa que descreve as propriedades estáticas e dinâmicas dos elementos manipulados pelo programa. 
 
Pode-se definir classes de objetos como a descrição de um grupo de objetos por meio de um conjunto uniforme de 
atributos e serviços. Uma classe é um conjunto de objetos que compartilham as mesmas operações. 
 
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 são relacionados. Um objeto possui 
uma identidade e suas características serão definidas para a classe. 
 
Uma classe é definida por: 
 
? um nome da classe; 
? o nome da sua superclasse; 
? o nome de suas variáveis privadas; 
? os nomes e as definições de todas as operações associadas a esta classe; 
 
Classe é um conceito estático: uma classe é um elemento reconhecido num texto de programa. por outro lado, um 
objeto é um conceito puramente dinâmico, o qual pertence não ao texto do programa, mas à memória do 
computador, local onde os objetos ocupam espaço durante a execução. (Conceitualmente, classes não são 
necessárias durante a execução, mas em linguagens interpretadas elas podem ser mantidas). 
ATRIBUTOS 
 
Um atributo é um dado para o qual cada objeto tem seu próprio valor. Atributos são, basicamente, a estrutura de 
dados que vai representar a classe. 
MÉTODOS 
 
Métodos são declarados dentro de uma classe para representar as operações que os objetos pertencentes a esta 
classe podem executar. Um método é a implementação de uma rotina, ou seja, o código propriamente dito. Pode ser 
comparado a um procedimento ou função das linguagens imperativas. 
 
1.1 Definição 
public class <Nome da classe> 
 
{ 
<Visibilidade: public/ private/ protected> 
 
<Visibilidade: public/ private/ protected> 
< lista de atributos > 
 
Construtor 
 
<Visibilidade: public/ private/ protected> 
< lista de declaração de métodos > 
} 
 
 
Exemplo: 
public class Aluno 
{ 
 //aqui vem os atributos 
 
 public Aluno(){} 
 
 //aqui vem os métodos 
} 
 
1.1.1 Visibilidade 
Cada "campo" da classe é chamado de "membro" da classe. A área de declaração de uma classe é dividida em sub-
áreas determinadas pela sua visibilidade. A visibilidade determina se uma outra parte do programa que declare ou 
utilize uma variável do tipo da classe, ou Objeto da Classe vai ou não poder acessar seus membros, ou seja escrever 
algo do tipo: 
... 
Aluno a; 
a.media() - isto só é possível se "media()" for um membro público. 
... 
 
A Orientação por Objetos foi desenvolvida com a finalidade de melhor dividir e integrar o desenvolvimento de 
sistemas. Num projeto grande, classes são desenvolvidas por uma equipe para serem utilizadas no código 
desenvolvido por outra equipe. Desta forma, a visibilidade permite a limitação de acesso da classe sendo 
desenvolvida por uma equipe. 
 
Pública: 
Todos os membros públicos podem ser acessados a vontade pelo resto do programa. Geralmente as funções, ou 
métodos, são sempre públicos. 
 
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 compilação, pois nota1 não é pública. 
x = a1.media(); 
} 
} 
 
Privada: 
Quando nada for declarado no corpo de uma classe em C# os membros serão privados por default. Em geral 
desejamos que os "campos", ou atributos de uma classe sejam privados, para impedir que outros usuários da classe 
acessem os valores dos dados. 
 
Palavra chave: private: ou, por default, qualquer membro é privado. Como não podemos acessar diretamente os 
"campos" da classe, cada vez que criamos uma nova variável do tipo da classe precisamos ter algum método 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 são modificadas através de um método público 
x = a1.media(); 
} 
} 
 
 
Protegida: 
A visibilidade protegida é similar a privada, contudo permite que os atributos possam ser acessados pelos filhos da 
classe(veja herança mais adiante). 
 
Palavra chave: protected: - Passa a ser visível para os filhos da classe 
 
 
1.2 Objetos X Variáveis 
Cada vez que criamos uma "variável do tipo da classe" dizemos que estamos criando um "objeto da classe". Estes 
objetos podem ser estáticos ou dinâmicos, assim como qualquer variável em C comum. A criação dinâmica 
obviamente necessita de uma "destruição" ou "apagamento" no final da utilização daquele objeto no programa. 
 
O que caracteriza a programação orientada a objetos são os objetos. De um modo geral podemos encarar os 
objetos como sendo os objetos físicos do mundo real, tal como: carro, avião, cachorro, casa, telefone, computador, 
etc., por isso que às vezes é dito que orientação a objetos representa os problemas mais próximo ao mundo real, 
dando assim mais facilidade a programação como um todo, mais isso não é sempre verdade, porque às vezes temos 
problemas que são extremamente funcionais1. Nesses problemas funcionais é difícil representar a estrutura lógica em 
torno de objetos. Com isso, não são todos os problemas que giram em torno dos objetos facilmente visíveis. 
 
De maneira simples, um objeto é uma entidade lógica que contém dados e código para manipular esses dados. 
Os dados são denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o código que o 
manipula denominamos método. Um método é uma função que manipula a estrutura de dados do objeto. 
 
Um objeto é um ente independente, composto por: 
 
? estado interno, uma memória interna em que valores podem ser armazenados e modificados ao longo da vida do 
objeto. 
? comportamento, um conjunto de ações pré-definidas (métodos), através das quais o objeto responderá a 
demanda de processamento por parte de outros objetos. 
 
Por exemplo: 
 
 
1funcionais: gira em torno de processos 
Uma tela de computador pode ter os seguintes atributos e métodos: 
 
atributos 
modo de operação /* texto/gráfico */ 
tamanho horizontal 
tamanho vertical 
paleta de cores 
cor atual 
métodos 
modo texto ( ) 
modo gráfico ( ) 
fecha modo gráfico ( ) 
muda cor ( ) 
escreve caracter ( ) 
coloca pixel ( ) 
muda dimensões (x,y) 
... 
 
Um guarda-roupa: 
 
estrutura 
conjunto de roupas /* tipo, tamanho, cor, estilo, preço, etc. */ 
portas 
número de portas 
capacidade máxima 
 
métodos 
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 próximo nodo) Primeiro e atual 
 
métodos 
cria lista ( ) /* cria célula cabeça e inicializa */ 
próximo ( ) /*vai para o próximo elemento da lista */ 
insere ( ) /* insere um elemento na posição atual */ 
deleta ( ) /* apaga posição atual */ 
volta ao começo ( ) /* atual = primeiro */ 
... 
 
Podemos notar que um objeto é composto por estrutura e processos, onde esses processos giram em torno da 
estrutura, ao contrário das linguagens funcionais, nas quais a estrutura se adapta a função. Um objeto só pode ser 
manipulado por sua estrutura e seus métodos, nada mais do que isso. 
 
Somente um objeto de um determinado tipo pode acessar seus métodos e estrutura, um outro tipo de objeto não tem 
nenhum acesso a estes. Por exemplo, em uma classe cachorro temos o método fala. Se por exemplo definirmos um 
objeto da classe gato, este objeto não tem acesso nenhum ao método fala de cachorro. 
 
Dentro de um objeto, alguns métodos e/ou estrutura podem ser privados ao objeto, o que nos diz que são 
inacessíveis 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 métodos, neste caso um método específico que faça a operação desejada, ou seja, ele pode acessar sua 
estrutura privada somente através de seus métodos, dando assim uma certa abstração de como é feita a manipulação 
da estrutura. Isso consiste no encapsulamento de dados que será explicado na seção referente a este tema. A 
princípio 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 não relacionadas de programa modifiquem ou usem 
incorretamente as partes privadas do objeto referenciado, dando assim maior confiabilidade na manipulação do 
objeto. Isso tudo nos mostra uma característica muito grande para construção de módulos independentes e abstração 
ao usuário. 
Mais exatamente, cada objeto é uma instância de sua classe. É a classe que contém a descrição da representação 
interna e dos métodos comuns a todas as suas instâncias (objetos). Cada instância da classe, por sua vez, possui sua 
própria memória privativa (seu estado interno) onde ficam armazenados os valores de seus componentes, que 
representam suas características individuais. 
 
1.2.1 Criação 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 variáveis 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 Métodos 
É o nome das funções declaradas dentro da classe que irão manipular ou gerar resultados a partir dos atributos da 
classe. As funções podem manipular livremente com quaisquer atributos da classe. Os atributos da classe pai(veja 
herança) somente podem ser acessados se forem atributos protegidos. Os métodos são invocados a partir de uma 
variável do tipo da classe. 
 
1.4.1 Declaração 
 
<Objeto da classe>.<Método>; 
 
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 são um "conforto" fornecido pela linguagem e pelo paradigma para que possamos "inicializar" nosso 
objeto da classe. Podemos notar que nos exemplos acima nos utilizamos métodos "iniciar" antes de começar a usar o 
objeto com a finalidade, neste caso, de inicializar seus parâmetros. A orientação objeto permite que criemos um 
método especial, denominado "construtor" que é chamado automaticamente pelo programa no momento da 
criação(ou declaração se preferir) do objeto. Em C++ O método deve simplesmente ter o mesmo nome da classe. 
Um classe pode ter muitos construtores, dependendo das formas de inicialização que desejarmos. Um construtor 
pode inclusive não ter parâmtros, sendo chamado de construtor default. Ele pode ser utilizado, por exemplo, somente 
para zerar o valor de atributos da classe. A única restrição é que quando criamos vetores de objetos, não podemos 
passar parâmetros para os construtores, somente serão chamados construtores sem parâmetros, 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: 
 
Declaração: 
public class <Nome da classe> 
{ 
public <Nome da classe>(parâmetros) 
 { 
Inicialização de atributos, Alocar memória,abrir arquivos, mensagens 
de tela,etc... 
{ 
} 
 
2 Herança 
A herança é o mecanismo que permite a reutilização dos métodos e atributos implementados numa classe numa outra. 
A classe que "herda" os métodos e atributos é chamada também de classe filha e a classe da qual ela herda é 
chamada de classe pai. Tomando como exemplo um cálculo de imposto de renda, existem vários cálculos que podem 
ser feitos tanto para pessoa física quanto para pessoa jurídica. Podemos definir uma classe pessoa criar classes 
pessoa jurídica ou pessoa física como heranças de pessoa. Todos os métodos declarados para a classe pessoa 
passam a pertencer também a pessoa física e juridica. 
 
2.1 Declaração 
A herança pode ser pública ou privada, se ela for pública (veja a declaração [public] abaixo, significa que os métodos 
que eram públicos na classe pai também o são na classe filha, no caso contrário, a classe filha pode acessar os 
métodos da classe pai dentro de seus métodos mas um "usuário" ou alguem usando um objeto da class filha não 
poderia acessar os métodos 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 não pode ler ou alterar os valores dos atributos da sua classe pai se eles forem privados. 
Para que isso seja possível é necessário declara- los como protegidos. A razão disso também é a integração e divisão 
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ó poderão ser acessados nas classes filhas através dos métodos da classe pai. 
 
3 Associações 
Uma associação é quando uma classe está ligada ou contém objetos de outras classes. Suponha, por exemplo, que 
uma classe Automóvel contenha dentro dela uma classe Proprietário. Dentro de um sistema grande a classe 
proprietário pode ser utilizada tanto para o automóvel quanto para uma Casa, por exemplo. As associações podem 
ser de 1 para 1, de 1 para muitos ou de muitos para muitos. Uma ligação de 1 para 1 seria a citada acima, de 
automóvel-proprietário. Uma associação de 1 para muitos é quando uma classe possui uma lista de objetos de uma 
outra classe. Uma classe Avião, por exemplo, poderia conter uma lista(ou vetor) de objetos da classe Passageiro. 
Existem várias formas de associação: 
 
3.1 Agregação 
É quando a classe "possui" realmente os objetos que agrega. Na prática, a classe agregadora passa a ficar 
responsável pela criação e destruição destes objetos. Suponha que você crie dinâmicamente vários objetos da classe 
Aluno e agregue numa classe Escola. O destrutor destaclasse tem que se encarregar de "deletar" todos os objetos da 
classe Aluno criados. 
 
3.2 Agregação por Composição 
Este tipo de agregação é usado quando usamos criação estática dos objetos que serão agregados. A diferença é que 
nesse caso, os objetos serão criados no mesmo momento que o objeto da classe agregadora, enquanto que a 
agregação "comum" a criação é dinâmica é feita após a criaçao da classe agregadora. 
 
3.3 Associação 
As Associações, chamadas simplesmente assim, são na prática referências 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 não tem responsabilidade sobre si, ou seja, não são elas que criam os objetos e nem as responsáveis 
pela sua destruição. 
 
4 Polimorfismo 
O polimorfismo é a característica mais complexa e ao mesmo tempo a mais poderosa da Orientação por Objetos. Ela 
permite que tratemos várias classes diferentes de uma forma generalizada, como se ela fosse uma mesma classe. O 
processo consiste em criar várias heranças 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 específica, do tipo WORD, por exemplo, fazemos uma herança da classe Janela. Prosseguindo, 
poderíamos criar heranças de Janela para cada tipo de aplicação que estivéssemos 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 contém alguns métodos chamados de Métodos Virtuais, que não fazem 
nada mas servem como um padrão para todas as filhas da classe Janela. Quando criamos uma herança da classe 
Janela, devemos obrigatóriamente redefinir os métodos Virtuais adequando-os para o nosso tipo de janela. Se 
criarmos, por exemplo, uma JanelaImagem, redefinimos o método Desenha da Janela Pai para que ele, no caso da 
classe JanelaImagem, desenhe uma imagem desejada. O que o Windows faz, após isto, é guardar uma lista de Janelas 
e tratá-las como se elas fossem apenas Janela, ignorando suas heranças. Quando o Windows tem que redesenhar as 
janelas ele vai em todas elas e chama o método virtual Desenha. O sistema automáticamente verifica qual a herança 
que realmente está ali e chama o método da classe filha adequado.

Outros materiais