UNIP – UNIVERSIDADE PAULISTA
INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA (ICET)
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
O Paradigma da Orientação a Objeto
Apresentada em Cumprimento Parcial dos
Requerimentos para o Curso de Ciências da Computação
Disciplina de Paradigmas de Programação, Professor Willian Zacarotto
Por
Alberto José Araujo 753384-5
Danilo Rodrigues Pereira 522306-7
Fevereiro 2005
-2-
SUMÁRIO
ABSTRAÇÃO ........................................................................................................................3
VARIÁVEIS ESTÁTICAS X DINÂMICAS.........................................................................4
FILA EM PASCAL / DELPHI ...............................................................................................8
FILA EM OOP......................................................................................................................10
PROGRAMAÇÃO MODULAR ..........................................................................................11
EMCAPSULAMENTO ........................................................................................................12
OCLUSÃO DE INFORMAÇÕES........................................................................................12
PASSOS DE MONTAGEM DE UM PROGRAMA OOP. EM JAVA ...............................13
PROGRAMAÇÃO ORIENTADA A OBJETO ...................................................................14
HERANÇA ...........................................................................................................................16
POLIMORFISMO ................................................................................................................19
MÉTODO .............................................................................................................................21
CLASSES E OBJETOS........................................................................................................22
MODELAGEM DE DADOS ...............................................................................................22
REUTILIZACAO .................................................................................................................23
BIBLIOGRAFIA ..................................................................................................................24
-3-
ABSTRAÇÃO DE DADOS
1 – Conceito
É uma forma de resolver um problema sem preocupar-se com os detalhes, observando
apenas os aspectos de interesse. Não levando em conta em qual tipo de computador será usado e
nem a linguagem que será usada.
Exemplo:
Verificar se um determinado número é par ou impar.
Para resolver esse problema simples primeiramente devemos pensar quais as condições
para que o numero seja par. Todo numero par é divisível por 2. Resolvido o problema depois é
só fazer a implementação na linguagem desejada.
Implementação em Pascal
Function par (N: real): Boolean;
Begin
if ( N mod 2 = 0 ) then
par := true;
end;
-4-
Outro exemplo:
Calcular a área de um triangulo.
Para resolver esse problemas, primeiramente devemos saber qual a formula para calcular a área
de um triangulo ( A = (base * altura )/2). Depois disso é só passar essa formula para a linguagem
desejada.
VARIÁVEIS ESTÁTICAS X DINÂMICAS
Até agora lidamos com variáveis que tiveram de ser criadas antes de se executar um
programa. São variáveis que existem o tempo todo (em tempo de execução), ou seja, são
variáveis estáticas. Portanto a alocação de memória para esse tipo de variável é feita antes da
execução do programa (compilação). A desvantagem é que uma vez criada esse espaço de
memória não pode ser alterado. As variáveis dinâmicas podem ser criadas e destruídas durante a
execução do programas. Essa é a grande vantagem sobre as estáticas.
Ponteiro ou apontador (Pointer em pascal)
São variáveis que aponta para um determinado endereço de memória (E.G endereço de
outras variáveis). Ou seja, ela aponta a um local da memória onde está armazenada uma variável.
Ex var P: ^integer;
Após esta declaração, teríamos criado uma variável do tipo Ponteiro que ocupa 4 bytes
(lembre-se que ela aponta um endereço, e como sabemos, no IBM/PC, um endereço é formado
pelo Segment e pelo offset, cada um com 2 bytes) e que irá apontar uma variável do tipo Integer.
Utilizamos como exemplo o tipo Integer, mas poderia ser qualquer outro tipo e até mesmo
Record.
-5-
Até esse instante, não criamos a tão famosa variável dinâmica, e sim uma variável do tipo
Ponteiro, que irá apontar o endereço de uma variável dinâmica do tipo Integer.
E dado isto, perguntamos: para onde está apontando a variável recém-criada chamada p?
Simplesmente para nenhum lugar. Isto recebe o nome em Pascal de NIL. Quando escrevemos no
meio de um programa a declaração abaixo:
p := NIL;
Estamos querendo dizer que a variável do tipo Ponteiro, chamada p, não está apontando
para nenhuma variável no momento. Sempre que criamos uma variável do tipo Ponteiro, ela tem
o valor inicial NIL Passo 2: Criação de variáveis dinâmicas
O próximo passo é a criação de uma variável dinâmica, para tanto, utilizamos a procedure
New. Sua sintaxe é:
New(p);
Isto faz com que seja alocado um espaço de memória, suficiente para armazenar uma
variável do tipo associado a p, no caso Integer. Esse espaço de memória fica num local especial
chamado HEAP. No caso do IBM/PC, o HEAP é toda a memória não utilizada pelo sistema.
Portanto, a declaração New(p) aloca um espaço de memória no HEAP, suficiente para
armazenar uma variável do tipo Integer e retorna o endereço inicial desta região de memória para
a variável p. Lembre-se que p é do tipo Ponteiro.
-6-
Exemplo usando variáveis dinâmicas.
Program Exemplo;
Uses CRT;
{Este programa lê registros com a estrutura abaixo, até que se
digite 'fim' quando é perguntado o nome da pessoa. Repare que o
programa tem a capacidade de ler um número ilimitado de
registros sem a preocupação de se definir um array e sua
respectiva dimensão.}
Nome : String[30];
Sexo : Char;
Idade : Integer;
Altura: Real;
Type
Pessoa = Record
Nome : String[30];
Sexo : Char;
Idade : Integer;
Altura: Real;
End;
ponteiro = ^Pessoas;
Pessoas = Record
Valor : Pessoa;
Prox : Ponteiro;
End;
Var
p,prim : Ponteiro;
Procedure Linha;
Var i:integer;
Begin
For i:=1 to 80 do write('-')
End;
Begin
Prim:=nil;
ClrScr;
Repeat
Linha;
New(p);
-7-
Write('Nome da pessoa -----> ');
Readln(p^.valor.Nome);
If (p^.valor.Nome<>'fim')
Then Begin
Write('Sexo ---------------> ');
Readln(p^.valor.Sexo);
Write('Idade --------------> ');
Readln(p^.valor.Idade);
Write('Altura -------------> ');
Readln(p^.valor.altura);
p^.Prox:=Prim;
Prim:=p;
End;
Until p^.valor.nome='fim';
ClrScr;
Linha;
p:=prim;
While p<>nil do
Begin
With p^.valor do
Writeln(nome:30,sexo:5,idade:5,altura:6:2);
p:=p^.prox;
End;
End.
-8-
FILA EM PASCAL / DELPHI
Criaremos um programa para cadastrar 1000 funcionários de uma empresa. Usando os 2
tipos de variáveis.
Estáticas:
Type
Funcionário = record
Nome : string[30];
Salário : real;
Setor : string[30];
Funcao : string[20];
end.
Var
EMPRESA: ARRAY[1..1000] OF FUNCIONARIO ;
Representação
1
Funcionario
2
3
Funcionario
Dinâmicas :
Type
Funcionário = record
Nome : string[30];
Salário : real;
Setor : string[30];
Funcao : string[20];
Prox : ^Funcionario;
end.
Var
P :^Funcionario;
procedure insere(x:Funcionario);
.......
Funcionario
1000
Funcionario
-9-
end;
var
elemento : Funcionario;
begin
if (p= nil) then
p:=x
else
elemento:=p;
while (elemento.prox = nil) do
begin
elemento:= elemento.prox;
end;
elemento.prox:= x;
Representação:
- 10 -
FILA EM OOP
A implementação desse objeto esta encapsulado, ou seja, não podendo ser acessado
pelo usuário, mas isso não quer dizer que ele não exista. A interface é a integração direita entre
o usuário e o objeto.
Exemplo: Um Aparelho de DVD. Para abrir o drive apertamos um botão (objeto do
DVD), nesse mesmo instante estamos acionando um EVENTO DESSE BOTÃO chamado
(ABRIR), que abrirá o drive. Mas aconteceram muitas coisas internamente para que isso
acontecesse, que seria os ATRIBUTOS.
- 11 -
PROGRAMAÇÃO MODULAR
Em Pascal e Delphi podemos criar nossas próprias bibliotecas UNIT contendo
procedures e funções.
Exemplo:
Unit DANILO;
Implementation
Crt;
Interface
Procedure alterarsalario(var X : real);
Begin
{comandos}
End;
Procedure inserir;
Begin
{comandos}
End;
End.
Program Fuincionario;
Uses crt, DANILO;
Begin
Clrscr; {crt}
Writeln( ´Digite o seu salario´, salário);
Novosalario:= alterarsalario;
End.
- 12 -
PRINCIPAIS CARACTERÍSTICAS
•
Encapsulamentos de dados e funções
•
Restrições à visualização das variáveis, constantes e módulos;
•
Separação do “O QUE É FEITO” do “COMO É FEITO”.
ENCAPSULAMENTO
É agrupamentos de idéias em uma mesma unidade.
•
Código (funções e procedimentos).
•
Dados (vetores e registros).
•
Código + Dados (Classes e Objetos).
OCLUSÃO DE INFORMAÇÕES
•
Restrições à visualização - BIBLIOTECAS
•
Classes com interface, onde somente os atributos são públicos (public), isso
garante que as modificações em alguma subclasse não afetaram essa classe e sim
somente os atributos públicos.
- 13 -
PASSOS DE MONTAGEM DE UM PROGRAMA OOP. EM JAVA
- 14 -
PROGRAMAÇÃO ORIENTADA A OBJETO
INTRODUÇÃO
A Metodologia Orientada a Objetos teve sua grande expansão nos anos 90, quando se
tornou a principal metodologia de desenvolvimento de software. Permite modelar de forma mais
natural o mundo real, pois as estruturas de dados são vistas como objetos, ou seja, têm
características e funções. Tem seu maior objetivo por aumentar a produtividade do
desenvolvimento de software através de uma maior expansibilidade e reutilização de código,
além de controlar a complexidade e o custo da manutenção do mesmo.
Quando utilizada, a fase de projeto do desenvolvimento do software está mais intimamente
ligada à fase de implementação. Um dos pontos chaves desta metodologia é centralização das
atenções nas Estruturas de Dados, ao contrário da metodologia estruturada, onde a atenção era
centralizada nos procedimentos. Na orientação a objetos há uma maior aproximação entre dados
e procedimentos, pois procedimentos são definidos em termos dos dados.
Definição: o termo orientação a objetos significa organizar o mundo real como uma
coleção de objetos que incorporam estrutura de dados e um conjunto de operações que
manipulam estes dados.
Todas as linguagens orientadas a objetos possuem três características básicas:
•
Objetos
•
Polimorfismo
•
Herança
- 15 -
As linguagens de POO podem ser divididas em dois grupos:
Puras : projetadas especificamente para o paradigma de OO : Smalltalk, Eiffel e Java
Híbridas : Extensões de linguagens tradicionais e suportam tanto o estilo tradicional
quanto o OO : (C++, Objective-C, CLOS e dialetos OO de Pascal)
Componentes Básicos da Orientação a Objetos
Classe
→ São moldes através dos quais criamos objetos
Objeto
→ Abstração que agrupa características e comportamentos.
Instância
→ É o objeto propriamente dito. Possui características próprias.
Propriedade
→ Define as características dos objetos de uma classe.
Método
→ Define o comportamento dos objetos de uma classe.
Mensagem
→ Representa uma ação do objeto ou uma mudança de estado. Define a
comunicação entre objetos.
Interface
→ Conjunto de mensagens que define o comportamento de um objeto
(Protocolo).
- 16 -
HERANÇA
Permite que uma nova classe seja descrita a partir de outra classe já existente
(Reutilização).
A subclasse herda as características e o comportamento da superclasse.
A subclasse pode adicionar novas características e comportamentos aos herdados da
superclasse.
A subclasse pode ter um comportamento diferente da superclasse, redefinindo o método
herdado.
A subclasse é uma especialização da superclasse.
Toda instância da subclasse é também uma instância da superclasse.
O resultado de uma seqüência de heranças é uma hierarquia de classes.
Exemplificando, sob o ponto de vista administrativo (no contexto de um banco, por
exemplo) a noção de Pessoa geralmente é subdividida (subclassificada) em: Pessoa Física (um
ente individual) e Pessoa Jurídica (uma empresa ou sociedade).
Uma possível descrição da estrutura (hierarquia de agregação /decomposição) de cada uma
destas classes poderia ser:
- 17 -
Note que as três propriedades mais à esquerda (Nome, Endereço e Telefone) são comuns às
duas classes. Como ambas as classes são subclasses da classe Pessoa, estas propriedades podem
ser mais bem descritas diretamente na classe Pessoa, evitando, desta forma, a repetição
observada acima.
O efeito final é o mesmo, ou seja, os objetos pertencentes às classes PessoaFísica e
PessoaJurídica terão as seis propriedades que lhe são características (as três comuns, mais as três
- 18 -
particulares). Isto ocorre em função das classes PessoaFísica
e PessoaJurídica serem
especializações da classe Pessoa e, portanto, herdarem as suas propriedades.
A herança de propriedades também ações. Considere a hierarquia de especialização
/generalização que se segue. Nela está expresso que Mamífero e Ave são subclasses
(especializações) de Animal, e que Homem, Gato e Cão são subclasses de Mamífero.
Uma ação característica de todos os mamíferos é mamar. Portanto, descreve-se esta ação
diretamente na classe Mamífero, de forma que, por herança, todas as subclasses passam a
apresentar esta propriedade. Evita-se, assim, a necessidade de descrever esta ação em cada uma
das subclasses de Mamífero. Similarmente, uma ação característica de todos os animais é olhar.
Por herança, as subclasses imediatas de Animal (Ave, Mamífero, etc) passam a apresentar esta
propriedade e, por transitividade, as subclasses destas classes também passam a fazê-lo.
O resultado deste mecanismo de herança de propriedades é que um objeto da classe Cão,
por exemplo, inclue em seu comportamento peculiar as ações olhar e mamar, além de outras
ações bem particulares que estarão descritas diretamente na classe Cão.
- 19 -
POLIMORFISMO
•
É a capacidade de tratarmos objetos de diferentes tipos de uma mesma maneira desde que
eles tenham um ancestral em comum
•
Objetos de classes diferentes podem ter métodos com mesmo nome e cada objeto
responderá adequadamente de acordo com seu método.
•
Métodos da mesma classe podem ter o mesmo nome, desde que possuam quantidade ou
tipo de parâmetros diferentes.
•
Métodos da classe derivada podem ter nomes iguais aos da classe base, inclusive com
parâmetros iguais.
Em linguagem estruturada:
Abstração da figura em uma definição de tipo: registro variante ou estrutura com um campo que
discrimina entre os diferentes tipos de figuras
PROCEDURE Display (umaFigura: Figura);
BEGIN
CASE umaFigura.figuraTipo OF
Triangulo: MostrarTriangulo (umaFigura.Triangulo)
Retangulo: MostrarRetangulo (umaFigura.Retangulo)
Quadrado: MostrarQuadrado (umaFigura.Quadrado)
Circulo: MostrarCirculo (umaFigura.Circulo)
END
END
- 20 -
Em linguagem OO com ligação dinâmica:
Implementar um método para cada figura, mas o mesmo nome pode ser usado para cada uma
delas.
Não é responsabilidade do usuário determinar o método correto a ser invocado.
Vantagens:
•
Sobrecarga de nomes
•
Mais adaptável à mudança
•
Uso de código reutilizável genérico
- 21 -
MÉTODO
Um grupo de instruções em uma classe, que define como os objetos da classe se
comportarão. Os métodos são semelhantes a funções em outras linguagens, mas sempre precisam
estar localizados dentro de uma classe.
•
Método de classe: Um método que opera em uma classe isoladamente, e não em
instancia específicas de uma classe.
•
Método de instância: Um método de um objeto que opera sobre este objeto manipulando
os valores de suas variáveis de instancia. Como os métodos de instância são muito mais
comuns do que os métodos de classe, eles normalmente são chamados apenas de
métodos.
- 22 -
CLASSES E OBJETOS
Uma classe é uma definição para um tipo de entidade da mesma maneira como uma
entrada em um dicionário é uma descrição de um tipo de entidade, como um carro. Um objeto é
uma abstração para uma única entidade, como seu carro. Uma classe define regras. Um objeto
define fatos. Um objeto é instanciado (criado) de acordo com as regras definidas por sua classe.
É um tipo de dado, como os já conhecidos, para declarar variáveis.
Uma variável de uma classe é chamada de Objeto.
Definir uma classe não cria um objeto, assim como um tipo de variável NÃO é uma
variável.
•
Variáveis de Classe: São os dados declarados em uma classe
•
Instância: Temos uma instância de uma classe quando declaramos um objeto a partir de
uma classe. É semelhante à declaração de uma variável.
MODELAGEM DE DADOS
Do desenho de sistemas de informação, a modelagem de dados consiste em desenhar o
sistema de informações, concentrando-se nas entidades lógicas e nas dependências lógicas entre
essas entidades.
Na fase inicial do desenvolvimento de um projeto de software, a ênfase será no desenho
de um modelo conceitual. Este pode ser detalhado em um modelo lógico dos dados às vezes
chamado de modelo de dados funcional. Em estágios posteriores, o modelo pode ser traduzido no
modelo físico.
- 23 -
REUTILIZAÇÃO
A capacidade de se otimizar a produtividade do programador depende diretamente da
maneira como o software disponibiliza a reutilização do código gerado. De fato, a maioria dos
programadores profissionais, já reutiliza código anteriormente gerado, porém a perfeita
reutilização consiste na utilização COMPLETA de um código gerado para algum sistema SEM
qualquer outra adaptação prévia.
Quatro requerimentos de software reutilizável
Os fatores importantes em reutilização de software são plenamente conhecidos há muito tempo.
Esses fatores são:
•
Documentação - deve haver informação adequada sobre o que cada componente de
software reutilizável pode fazer.
•
Flexibilidade - um componente verdadeiramente reutilizável deve ser aplicável em mais
de um contexto.
•
Visibilidade - para reutilizar software, os desenvolvedores devem poder encontrar os
componentes a reutilizar (em um catálogo de componentes reutilizáveis, por exemplo).
•
Eficiência - um componente de reutilizável não será utilizado se não tiver a eficiência
requerida pelo programa de aplicação.
- 24 -
BIOGRAFIA
CHAGAS JUNIOR, WALTER ALVES. O QUE É ORIENTAÇÃO À OBJETOS ?,
Belo Horizonte, [s.n.], Jun. 2001. Disponível em:
<http://www.geocities.com/SiliconValley/Bay/1058/oop.html>. Acesso em: mar. 2005.
Conceitos de Orientação a Objetos, [S.I.], [s.n.]. Disponível em:
<http://groups.msn.com/cafedotnet/conceitosdeorientaoaobjetos.msnw>. Acesso em:
mar. 2005
DELPHI Orientação a Objetos + Object Pascal , [S.I.], [s.n.]. Disponível em:
<http://www.firstsoft.com.br/curso/delphi_avancado1.htm >. Acesso em: mar. 2005.
HARADA, ELAINE TEIXEIRA DE OLIVEIRA. Orientação a Objetos - Uma
Introdução à Programação Orientada a Objetos – DCC – ICE - UFAM, 2004, [S.I.],
[s.n.]. Disponível em: <http://www.dcc.ufam.edu.br/~elaine/>. Acesso em: mar. 2005.
LIMA, BRUNO R. Orientação a Objetos e Java Na Prática Minicurso : Entendendo
orientação a objetos e aplicando-a na linguagem Java em um exemplo prático, São
Paulo, Conexão Java, Ago. 2004. Disponível em:
<http://www.conexaojava.com.br/conexaojava04/download/minicursos/OO.e.Java.na.pra
tica-Conexao.Java.2004.pdf>. Acesso em: mar. 2005.
Modelagem de dados, [S.I.], [s.n.]. Disponível em:
<http://pt.wikipedia.org/wiki/Modelagem_de_dados>. Acesso em: mar. 2005
Pequeno dicionário básico de orientação a objetos em Java, São Paulo, Linha de
código, Ago. 2004. Disponível em:
<http://www.linhadecodigo.com.br/artigos.asp?id_ac=95> . Acesso em: mar. 2005.
Programação Orientada a Objetos - LSC / INF / UFSC, Santa Catarina, [s.n.].
Disponível em <http://www.inf.ufsc.br/poo>. Acesso em: mar. 2005.
SEBESTA, ROBERT W. Conceitos de Linguagens de Programação / Robert W.
Sebesta; trad. José Carlos Barbosa dos Santos. – 5. ed. – Porto Alegre: Bookman, 2003.
Download

Orientacao a objetos