290 likes | 543 Views
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.
E N D
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 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.
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.
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