Programação Orientada a Objetos e a Linguagem Java
Rodrigo da Cruz Fujioka [email protected]
Ling de Programação II
Objetivos Objetivos
• Conceitos de programação orientada a objetos existentes na sintaxe da linguagem Java
– Características OO
em Java: abstração,herança, encapsulamento, polimorfismo, etc...
encapsulamento, polimorfismo, etc...
Motivação
• Java é uma linguagem OO
• Para desenvolver aplicações de qualidade em Java é preciso aprender a aplicar princípios de OO ao programar
• É (quase) possível escrever programas em Java sem saber OO, mas:
– Dificilmente você será capaz de ir além de programinhas simples com – Dificilmente você será capaz de ir além de programinhas simples com
mais de uma classe
– Será muito difícil entender outros códigos
– Seu código será difícil de entender, manter e reutilizar
– Você estará perdendo ao utilizar uma linguagem como Java (poderá usar outra mais simples para escrever de forma procedural)
– Em síntese, 60% de Java se resume as teorias de OO.
Evolução da Programação Imperativa
• Primeira Geração (1954-1958)
– Aplicações científicas e militares – Expressões e funções matemáticas – Fortran I, Algol58, FlowMatic
– Códigos monolíticos
4
– Códigos monolíticos
Dados
Procedimentos
Evolução da Programação Imperativa
• Segunda Geração (1959-1961) – Primeiras estruturas de blocos
– Conceito de subrotinas (primeiras abstrações algorítmicas)
– Cobol, Lisp, Fortran II
5
Cobol, Lisp, Fortran II
Dados
Procedimentos
Evolução da Programação Imperativa
• Terceira Geração (1962-1970)
– Modularização dos sistemas (abstrações maiores)
– Mas... ainda continuávamos a “meter a mão nos dados”
Módulos
6 Dados
Procedimentos
Programação Imperativa
• Características
– Ênfase muito grande dada aos procedimentos e funções
• Modela-se a solução de um problema tomando-se como base as funções a serem executadas.
– Dados são tratados de forma secundária
7
– Dados são tratados de forma secundária
• Variáveis globais são criadas com o objetivo de atender a todos os módulos
• Estes dados estão acessíveis e podem ser corrompidos
– Paradoxo
• Dados são importantes!
• Sem os dados os procedimentos não teriam utilidade prática
Programação Orientada a Objetos
• Características
– A ênfase aqui é dada às estruturas de dados, adicionando-se funcionalidades a elas
– Modela-se um sistema decidindo os objetos necessários
8
necessários
• Estes, então, são caracterizados através de propriedades (que informações cada objeto deve armazenar?) e
comportamento (que tarefas cada objeto deverá desempenhar?)
– O programador vê seu sistema como uma coleção de objetos cooperantes, que se comunicam entre si
através do envio e recebimento de mensagens
Paradigma Orientado a Objetos
• Características
–
Implementa-se um sistema com base no conceito de objetos.
–
Estes são caracterizados através
• Atributos
(informações que cada objeto deve armazenar)
• Comportamento
(tarefas que cada objeto deverá desempenhar).
Paradigma Orientado a Objetos
• Características
–
Atributos (dados) e operações (comportamento) são igualmente enfatizados, o que não ocorre no paradigma imperativo.
–
Os dados de um objeto são acessados apenas
–Os dados de um objeto são acessados apenas
pelas operações do objeto.
–
Os objetos representam coisas do mundo real:
papéis, animais, coisas, aparelhos, documentos e
etc...
Paradigma Orientado a Objetos
–
Um objeto armazena dados e implementa um conjunto de operações.
–
Modificações internas não alteram os outros objetos (interfaces bem definidas)
objetos (interfaces bem definidas)
Paradigma Orientado a Objetos
• A construção de um Software OO envolve um processo de mapeamento de entidades no
espaço de problemas para objetos no espaço de soluções, de tal maneira que as espaço de soluções, de tal maneira que as
operações definidas para esses objetos
correspondam a operações do mundo real.
Paradigma Orientado a Objetos
Paradigma Imperativo versus
Paradigma OO
Paradigma Imperativo versus Paradigma OO
Benefícios do Paradigma OO
• O comportamento do objeto é independente da representação interna dos dados
• Dados são protegidos contra acesso indevido
• Extensibilidade, mudança de representação e adição de nova funcionalidade pode ser feita de maneira incremental e com mínimo
distúrbio no sistema como um todo
Benefícios do Paradigma OO
• Diminuição da distância semântica entre o software e o domínio do problema
• Sistemas são “montagens” de código previamente testado
– Menos erros e menor custo de manutenção – Menos erros e menor custo de manutenção
• Desenvolvimento mais rápido
– Construção a partir de objetos padrões
– Reuso através de herança e modelos Corporativos – Prototipagem rápida
Programação Orientada a Objetos
• O mundo é composto por Objetos.
Programação Orientada a Objetos
• O que é um Objeto?
– “Alguma coisa que faz sentido no domínio da aplicação”
– Uma abstração
• Utilidade:
• Utilidade:
–
Facilita a compreensão– Oferece base real para implementação no computador
Programação Orientada a Objetos
• Descrição de um Objeto
– Um objeto pode ser descrito por um conjunto de atributos e comportamentos
Atributos
Motor Cor Potência
Rodas Velocidade
Comportamentos
Avançar Retroceder
Parar Abastecer
Programação Orientada
a Objetos
Programação Orientada a Objetos
• Tudo (em uma aplicação OO) é objeto.
• O comportamento de um objeto é representado através de seus métodos.
• Quando um método é invocado (chamado), dizemos
• Quando um método é invocado (chamado), dizemos que houve o envio de uma mensagem para o objeto que possui esse método.
• Ao receber uma mensagem o objeto executa o método correspondente e retorna um valor.
Programação Orientada a Objetos
• Quando executado, um método altera o estado (atributos) do objeto.
• Um objeto pode ser composto de outros objetos.
• Um programa corresponde a um conjunto de objetos enviando mensagens uns aos outros, para juntos
enviando mensagens uns aos outros, para juntos atingirem um comportamento de mais alto nível.
– Ex: Avião (motor e asa não voam)
• Todo objeto possui um tipo.
• Todos os objetos de um tipo particular podem receber as mesmas mensagens.
Programação Orientada a Objetos
• Dados não estão disponíveis globalmente, mas encapsulados em um objeto, que sabe tratá-los
através de seus métodos, e tem alguma relação com
eles (coesão).
Programação Orientada a Objetos
• Conclusões
– Na OO, os dados não estão disponíveis globalmente, mas modularizados e confinados (encapsulados) sob a parte do sistema (funções) que sabe tratá-los e tem alguma relação com eles (coesão)
25
alguma relação com eles (coesão)
– Entretanto, na programação imperativa, todas as
funções estão no mesmo nível hierárquico e podem, potencialmente, acessar qualquer dado da aplicação
• A manutenção tanto corretiva quanto expansiva são muito difíceis de serem realizadas
Programação Orientada a Objetos
• Conclusões
– Uma classe em Java permite que vários objetos
daquela classe possam ser criados e passem a existir independentemente uns dos outros
– O polimorfismo e a herança permitem que o
26
– O polimorfismo e a herança permitem que o
processamento comum a tipos equivalentes seja realizado de uma vez só
• Isso evita a criação de diversas funções com assinaturas diferentes, mas que, semanticamente, são muito
semelhantes.
Conceitos e Terminologias
Abstração
•
Objetos
•
Encapsulamento/Ocultação de informação
•
Estado e comportamento
•
Classes
•
Classes
•
Herança
•
Polimorfismo
Abstração
• Eliminação do irrelevante e amplificação do essencial
Abstração
• Através da abstração:
– O indivíduo observa a realidade e se concentra nos aspectos considerados essenciais para uma aplicação, excluindo todos os outros julgados irrelevantes.
excluindo todos os outros julgados irrelevantes.
• Um sistema bancário abstrai a entidade real cliente, onde apenas alguns dados relevantes são considerados (nome, cpf, endereço, salário, etc).
• Não é necessário armazenar todos os dados do cliente (o tamanho do pé, se é careca, a cor do cabelo, etc).
Abstração
• Através da abstração:
– O indivíduo observa a realidade e se concentra nos aspectos considerados essenciais para uma aplicação, excluindo todos os outros julgados irrelevantes.
excluindo todos os outros julgados irrelevantes.
• Um sistema bancário abstrai a entidade real cliente, onde apenas alguns dados relevantes são considerados (nome, cpf, endereço, salário, etc).
• Não é necessário armazenar todos os dados do cliente (o tamanho do pé, se é careca, a cor do cabelo, etc).
Abstração
• Através da abstração:
• Abstração de operações
– As responsabilidades de um objeto são divididas em métodos (operações).
– Para usar uma função escrita por terceiros, abstraímos – Para usar uma função escrita por terceiros, abstraímos
a sua implementação e nos concentramos na sua interface
Abstração
• Através da abstração:
• Abstração de dados
• Serve para representarmos entidades reais numa linguagem de computador, identificando as
propriedades destas entidades que realmente propriedades destas entidades que realmente interessam no sistema
Próxima Aula
Dúvidas?
Próxima Aula
– Sintaxe Java para construção de estruturas de dados
– Componentes de uma classe e sua divisão interna
– Mostrar um exemplo para levantar as vantagens da programação OO
Exercício - Pare Pense
– Crie uma abstração de dados e de procedimentos para a cadeira em que você está sentado agora
– Crie uma abstração de dados e de procedimentos para o seu colega do lado
– Criar uma abstração de dados e de comportamento para o seu celular.
seu celular.
– Criar uma abstração de dados e de comportamento para um aluno.
– Criar uma abstração para uma televisão.