Introdução a programação orientada a objetos

Propaganda
Introdução ao Paradigma de
Programação Orientada a Objetos
Prof. Antonio Mendes da Silva Filho
Orientação a Objetos
Introdução
 Propósito da Programação OO
 Características das Linguagens OO
 Sugestões de leitura

Introdução a OO
POO é uma das principais inovações no
desenvolvimento de software da última década.
 Complexidade: Principal problema na elaboração
de programas.

– Quão maior a complexidade, maior a possibilidade de
haver erros.

Erros de software têm elevado custo de correção
– Podem causar situações de falhas operacionais;
– Podem colocar vidas em perigo.
Introdução a OO (cont.)
POO compreende uma nova abordagem
de conceber e construir programas.
 POO permite lidar com a complexidade.
 POO facilita a manutenção.
 POO possibilita a obtenção de programas
mais confiáveis.

Propósito da POO

POO foi desenvolvida devido às limitações
existentes nas abordagens anteriores.
– Projeto e programação estruturada.
Para programas pequenos, não há necessidade
de princípio organizacional.
 À medida que cresce o tamanho dos programas,
torna-se difícil compreender programas que
excedam a centenas de linhas de código.

– Questão da complexidade
Linguagens Procedimentais

Exemplos de linguagens procedimentais:
– Fortran, Pascal e C
Um programa numa linguagem
procedimental é uma lista de instruções.
 O programador cria um conjunto de
instruções e o computador as executa.
 Funções, em linguagens procedimentais,
servem para ‘modularizar’ os programas.
 Módulos consiste de um grupo de funções.

Programação Estruturada
Divisão de um programa em funções e módulos
constitui um dos fundamentos da programação
estruturada.
 Função: mecanismo usado para `quebrar’ (i.e.
dividir) o programa em unidades menores.

– Tornar os programas mais compreensíveis

Disciplina de programação que tem influenciado
a organização de programas há vários anos.
Problemas na Programação Estruturada

As linguagens procedimentais colocam
ênfase na função
– Ler dados, processar, checar existência de
erros, mostrar resultados, ...

Parte importante na solução de problemas
computacionais: DADOS
Problemas na Programação Estruturada

Em linguagens procedimentais:
– Variáveis locais são usadas apenas dentro do escopo
da função onde são declaradas.
– Variáveis locais não são úteis para dados que devem
ser acessados por muitas e diferentes funções.
– Vide slide 10.

Em outro contexto
– Se muitas funções tem acesso a um conjunto de
dados, então qualquer modificação nos dados requer
modificações em todas as funções. Vide slide 11.
– Tornar-se-á difícil fazer a manutenção correta de tais
funções.
Relação entre variáveis globais e locais
Relação entre funções e dados em
programas procedimentais
Problemas na Programação Estruturada

Programas em linguagens procedimentais
são mais difíceis de serem projetados
– Funções e estruturas de dados não modelam
o mundo real muito bem.

Mais difícil oferecer extensibilidade a
linguagem procedimental, i.e.:
– Adicionar, manipular e fazer a manutenção de
novos tipos de dados.
O que é necessário?
Uma forma de restringir o acesso aos
dados
 Esconder os dados de todas, exceto
algumas poucas funções `críticas’
 Benefícios resultantes:

– Proteção aos dados
– Simplificará a manutenção
Abordagem orientada a objetos
Introdução da POO
 Linguagens OO combinam numa única
entidade (objeto) dados e funções que
atuam sobre esses dados.
 Funções de um objeto oferecem uma
única forma de acesso a seus dados.

– Em C++, funções membro
– Em Java, métodos
Abordagem OO (2)

Num programa OO, se você precisar ler os dados de um
objeto, então:
– Você chama a função daquele objeto
– A função ler os dados e retorna os valores a você

Os dados ficam `escondidos’, i.e.:
– POO oferece suporte a ocultação de dados ou data hiding;
– Os dados ficam seguros de qualquer alteração `acidental’;

Dados e funções ficam `encapsulados’ em uma única
entidade, denominada de objeto.
Abordagem OO (3)

Para acesar os dados de um objeto, você precisa
saber quais métodos/funções interage com ele.
– Isto simplifica escrita, depuração e manutenção de
programas.

Um programa numa linguagem OO consiste de
vários objetos, comunicando-se entre si, i.e.:
– Através de trocas de mensagens (Java)
– Através da chamada de funções membro de
outro objeto (C++)
– Vide slide 17.
Abordagem OO (4)
Objeto
dados
função membro
função membro
Objeto
Objeto
dados
dados
função membro
função membro
função membro
função membro
Características das Linguagens OO
Modelagem em termos de objetos
 Exemplos de objetos

– Componentes elétricos, automóveis numa
simulação de fluxo de tráfego
– Janelas, menus, objetos gráficos, ...
– Pontos no plano, tempo, ...
Classes
Objetos são membros de classes
 Classe ser como um padrão, modelo ou
template
 Classe especifica quais dados e funções
pertencerão aquela classe.
 Definir uma classe não cria qualquer
objeto, assim como a simples existência
de um tipo de dado não cria quaisquer
variáveis.

Classes (2)
Coleção de objetos similares
 Classe de jogadores de futebol:

– Pelé
– Ronaldinho
– Romário
Note que não existe uma pessoa chamada
`jogador de futebol’
 Todavia, pessoas com nomes específicos são
membros desta classe SE possuem
determinadas características.

Herança

Classes podem ser divididas em subclasses
como, por exemplo:
– A classe dos animais é dividida em mamíferos,
anfíbios, insetos, aves, ...
– A classe dos veículos é dividida em carros de passeio,
caminhões, ônibus, motocicletas, ...

Princípio da herança
– Classes derivadas compartilham características
comuns com a classe da qual ela é derivada. Vide
slide 22.
– Reduz o tamanho do programa e aumenta a clareza
do programa.
Noção de herança
A
classe
base
B
A
A
B
C
classes
derivadas
B
D
E
Reusabilidade

Depois que uma classe tenha sido criada,
escrita e testada, ela pode ser distribuída
para vários programadores e reutilizada.
– Similar a forma na qual uma biblioteca de
funções numa linguagem procedimental pode
ser incorporada em diferentes programas.
– Conceito de extensão de classe (reusabilidade
da classe), i.e., adicionar novas características
à classe já existente.
Criação de novos tipos

Exemplo:
posição2 = posição + origem
– As variáveis acima representam coordenadas
– Representam entidades reais de modo mais
claro e direto, i.e. suporte a
compreensibilidade.
Polimorfismo

No exemplo anterior:
posição2 = posição + origem
– Os operadores = (igual) e + (soma) usados
na expressão acima não atuam de maneira
similar com os tipos predefinidos da
linguagem OO como um `int’.
– Usar operadores ou funções de formas
diferentes, dependente sobre o que eles estão
operando, é denominado de polimorfismo.
Sugestões de leitura

Vide artigo sobre POO no site da Revista
Espaço Acadêmico em
www.espacoacademico.com.br/035/35amsf.htm

J. Rumbaugh et al, Modelagem e Projetos
Baseados em Objetos com UML 2, Ed.
Campus, 2002;
Sugestões de leitura (2)
K. Arnold and J. Gosling, The Java
Programming Language, Addison-Wesley,
1996.
 H. M. Deitel and P. J. Deitel, Java – How to
Program, Prentice Hall, 3rd Edition, 1999.
 http://java.sun.com

Download