Introdu
Introduç ção ão à à Programaç Programa ção ão Orientada a Objetos
Orientada a Objetos
BSI – Bacharelado em Sistemas de Informação LOO – Linguagens Orientadas a Objetos
Humberto Mossri de Almeida
hmossri_cursos@yahoo.com.br
Marcelo Nassau Malta
nassau_cursos@yahoo.com.br
LOO - Linguagens Orientadas a Objetos 2
Sumá Sum ário rio
Histórico
Conceitos Básicos
Um exemplo prático
Vantagens e Objetivos
Armadilhas
Revisão
Introdução à Programação Orientada a Objetos
Histó Hist órico rico
Linguagens binárias
Programas escritos em linguagem binária e introduzidos diretamente na memória principal do computador
Grande propensão a erros
Muita dificuldade para manutenção
Exemplo: Assembly (linguagem de montagem)
Introdução à Programação Orientada a Objetos
Histó Hist órico (cont.) rico (cont.)
Linguagens procedurais
Programa reduzido em procedimentos refinados para processar dados
Chamadas seqüenciais a esses procedimentos geram a execução de um programa
O programa termina ao final da lista de procedimentos
Maior facilidade para entendimento
Limitações para reutilização de código
LOO - Linguagens Orientadas a Objetos 5
Histó Hist órico (cont.) rico (cont.)
Linguagens procedurais (cont.)
Muita dificuldade para manutenção:
●Alterações em uma estrutura de dados requer manutenções em todos os pontos do programa que utilizam essa estrutura
Exemplo: Fortran (década de 50)
LOO - Linguagens Orientadas a Objetos 6
Histó Hist órico (cont.) rico (cont.)
Programação modular
Divisão de um programa em componentes ou módulos constituintes
Um módulo combina dados e procedimentos que manipulam esses dados
Os módulos possuem interfaces para que outras partes do programa possam utilizá-los
Os módulos ocultam dados internos do restante do programa introduzindo a idéia de estado
Introdução à Programação Orientada a Objetos
Histó Hist órico (cont.) rico (cont.)
Programação modular (cont.)
O estado de um objeto representa a
combinação das variáveis internas do objeto
Uma variável interna é um valor mantido dentro do objeto
Principais problemas:
●Os módulos não são extensíveis
●Um módulo não pode ser baseado em outro Exemplo: Módula 2
Introdução à Programação Orientada a Objetos
Histó Hist órico (cont.) rico (cont.)
Mudança de Paradigma
Top-down(refinamentos sucessivos)
● Define o sistema em função de suas ações
● Identifica ações principais:
Efetuar compra Processar pedido Orientado a Objetos
● Define o sistema em função dos objetos que ele manipula
● Identifica elementos do contexto e seus relacionamentos:
Clientes Produtos Vendedores
LOO - Linguagens Orientadas a Objetos 9
Histó Hist órico (cont.) rico (cont.)
Programação Orientada a Objetos (POO)
É um paradigma de programação
Foi concebida a partir de práticas
comprovadas, testadas e refinadas ao longo de 50 anos
Surgiu no final dos anos 60 (Simula 67)
Nos anos 70 a Xerox criou a Smalltalk pela equipe do pesquisador Alan Kay
POO se tornou popular nos anos 90
LOO - Linguagens Orientadas a Objetos 10
Histó Hist órico (cont.) rico (cont.)
POO (cont.)
Princípios (Alan Kay)
● Qualquer coisa é um objeto
● Objetos realizam tarefas através da requisição de serviços a outros objetos
● Cada objeto pertence a uma classe
● Uma classe agrupa objetos similares
● A classe é um repositório para comportamento associado ao objeto
● Classes são organizadas em hierarquias
Introdução à Programação Orientada a Objetos
Histó Hist órico (cont.) rico (cont.)
POO - Definição
É uma disciplina de software que realiza a modelagem de programas em termos de objetos do mundo real
Divide um programa em vários objetos inter- relacionados
Introdução à Programação Orientada a Objetos
Histó Hist órico (cont.) rico (cont.)
POO x Programação Modular
Ambas suportam o encapsulamento
POO elimina as deficiências de reutilização através da herança
POO elimina as deficiências de tipos através do polimorfismo
LOO - Linguagens Orientadas a Objetos 13
Histó Hist órico (cont.) rico (cont.)
POO (cont.)
Analogia com o mundo animal
● Características comuns agrupam seres vivos do mundo real em classes
Empacotamento de dados e procedimentos em um mesmo elemento: Objeto
Linguagens OO mais conhecidas:
● Java, C#, C++
LOO - Linguagens Orientadas a Objetos 14
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Classe
Representam abstrações das entidades do mundo real
Agrupamento de entidades pelos seus comportamentos e propriedades comuns
Define todas as características comuns de um tipo de objeto
Exemplos: cachorro, pessoa, carro
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Classe (cont.)
Um conjunto de objetos que compartilham uma estrutura comum e um comportamento comum (Booch)
Um gabarito para diversos objetos que
descreve como estes objetos são estruturados internamente (Jacobson)
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Objeto
Representam instâncias de uma classe
Exemplos:
● João, Maria são instâncias da classe pessoa
● Totó é uma instância da classe cachorro
● Pálio placa HAE-2544 é uma instância da classe carro
LOO - Linguagens Orientadas a Objetos 17
Conceitos B
Conceitos Bá ásicos sicos
Objeto (cont.)
É algo que possui estado, comportamento e identidade (Booch)
Uma entidade capaz de armazenar um estado (informação) e que oferece um número de operações (comportamento) para ou examinar ou alterar o estado (Jacobson)
LOO - Linguagens Orientadas a Objetos 18
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Objeto: Estado
Valores das propriedades de um objeto em um instante do tempo
Ao longo do tempo, um objeto normalmente muda de estado
Exemplo (Sócio):
● nome: João da Silva
● telefone: 2345555
● data admissão: 23/02/1997
● situação: matrícula normal
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Objeto: Comportamento
Como um objeto reage às solicitações de outros objetos
É determinado por um conjunto de operações que o objeto pode desempenhar e pelas suas reações a estímulos externos
Forneça alguma informação (sem mudar o estado)
● umaFita.numEmprestimos();
Faça algo (podendo mudar de estado)
● umaFita.setNumero(40);
Algo aconteceu (notificação de um evento)
● umaFita.emprestimo();
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Objeto: Identidade
Cada objeto possui uma única identidade
Dois objetos com os mesmos valores de propriedades (estado) possuem identidades diferentes
Identidade independe de códigos ou identificadores do domínio
● Fita (código X identidade)
LOO - Linguagens Orientadas a Objetos 21
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Atributos
São propriedades que definem as características de uma classe
Exemplos:
●A cor de um carro
●A cor dos olhos de uma pessoa
●A cor do pêlo de um cachorro
LOO - Linguagens Orientadas a Objetos 22
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Mensagem
Objetos se comunicam através de mensagens
São os estímulos que fazem com que os objetos executem operações (métodos)
Passar uma mensagem a um objeto é o mesmo que chamar um método desse objeto que altere o seu estado ou realize alguma operação
Permitem independência entre objetos
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Mensagem (cont.)
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Métodos
Representam o comportamento de um objeto
Comportamento é o que um objeto é capaz de fazer
Como os métodos são acionados:
● através de uma mensagem enviada por outro objeto
● em resposta a uma mudança de estado (alteração de uma ou mais propriedades)
LOO - Linguagens Orientadas a Objetos 25
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Métodos (cont.)
Exemplos:
●Latir é uma operação realizada por objetos da classe cachorro
●Andar é uma operação realizada por objetos da classe pessoa
●Frear é uma operação realizada por objetos da classe carro
LOO - Linguagens Orientadas a Objetos 26
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Exemplo de uma classe em Java
public class Item { private String id;
private String description;
...
// Métodos públicos }
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Exemplo de uma classe em Java (cont.)
public class Aluno { private String matricula;
private String nome;
private String endereco;
private Curso curso;
public Aluno (...) {...}
public void efetuar_matricula(){...}
public void trancar_matricula(){...}
public void cancelar_matricula(){...}
}
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Métodos Construtores
Métodos utilizados para inicializar objetos durante sua instanciação
Exemplo:
public Item (String id, String description) { this.id = id;
this.description = description;
}
LOO - Linguagens Orientadas a Objetos 29
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Métodos Acessores (getters)
Acessam dados internos de um objeto
Os dados internos podem ser acessados diretamente ou após algum processamento
Exemplo:
public String getDescription () { return description;
}
LOO - Linguagens Orientadas a Objetos 30
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Métodos Mutantes / Modificadores(setters)
Permitem a alteração do estado interno de um objeto
Possibilitam a implementação de regras para alteração do estado de um objeto
Exemplo:
public void setDescription (String description) { this.description = description;
}
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Agregação
Um objeto pode ser composto por outros objetos
Em POO tudo é um objeto, inclusive as partes que compõem um objeto
Exemplo:
descriptioné uma propriedade da classe Item a descrição do item é um objeto da classe String
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Agregação (cont.)
Objeto Computador
● Monitor
● Gabinete Placa-Mãe
CPU
Placa de vídeo (on-board)
DVD
Fonte
● Teclado
● Mouse
LOO - Linguagens Orientadas a Objetos 33
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Os três pilares da POO
1. Herança
●Possibilita que novas classes sejam definidas a partir de classes mais genéricas que já existem
●Permite a extensão de classes
LOO - Linguagens Orientadas a Objetos 34
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Os três pilares da POO (cont.)
2. Encapsulamento
● É a implementação controlada de propriedades e métodos correlacionados em uma mesma entidade
● Permite ocultar partes independentes da implementação
● Faz com que os detalhes de implementação não sejam visíveis para o mundo exterior
Introdução à Programação Orientada a Objetos
Conceitos B
Conceitos Bá ásicos (cont.) sicos (cont.)
Os três pilares da POO (cont.)
3. Polimorfismo
●Possibilita a construção de programas flexíveis
●Altera o comportamento de uma classe dentro de uma hierarquia de classes
Introdução à Programação Orientada a Objetos
Um exemplo pr
Um exemplo prá ático tico
Um exemplo do mundo real
LOO - Linguagens Orientadas a Objetos 37
Um exemplo pr
Um exemplo prá á tico (cont.) tico (cont.)
Um exemplo do mundo real
Acelerar Acender farol Arrancar Frear Virar
Travar portas Trocar marcha Cor
Ano Marca Modelo Placa Motor Preço
Métodos Propriedades
LOO - Linguagens Orientadas a Objetos 38
Vantagens e Objetivos Vantagens e Objetivos
A Programação Orientada a Objetos produz softwares com as seguintes características:
Oportuno
Reutilizável
Extensível
Confiável
Manutenível
Natural
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Natural
Programas naturais são mais inteligíveis
A programação utiliza a terminologia do problema em questão
Um problema é modelado em nível funcional e não em nível de implementação
Para utilizar um software, basta saber o que ele faz
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Natural (cont.)
Exemplo da classe aluno em um sistema acadêmico
LOO - Linguagens Orientadas a Objetos 41
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Confiável
Um software deve ser tão confiável quanto um eletrodoméstico: geladeira, televisão, etc.
Programas Orientados a Objetos bem projetados e cuidadosamente escritos são confiáveis
A modularidade de uma classe permite que ela seja alterada sem que outras classes sejam afetadas
LOO - Linguagens Orientadas a Objetos 42
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Confiável (cont.)
Aprimoramento de testes: o isolamento das responsabilidades (atributos e métodos) de uma classe permite que ela seja testada de forma independente
Um componente devidamente validado pode ser reutilizado com confiança
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Reutilizável
Uma vez que um problema já tenha sido resolvido anteriormente, a solução deve ser reutilizada
A herança permite estender objetos existentes
O polimorfismo permite escrever código genérico
Nunca reinventar a roda!
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Reutilizável (cont.)
A OO não garante código genérico
A criação de classes bem feitas não é tarefa simples
A reutilização de código depende da concentração e atenção à abstração
Objetos que resolvem problemas específicos devem ser construídos a partir de objetos genéricos
LOO - Linguagens Orientadas a Objetos 45
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Manutenível
O ciclo de vida de um programa não termina após a sua implantação
Entre 60% e 80% do tempo gasto trabalhando em um programa é para manutenção
O desenvolvimento representa apenas 20% do tempo necessário para atende o objetivo do programa
LOO - Linguagens Orientadas a Objetos 46
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Manutenível (cont.)
Um código OO bem projetado é manutenível
Uma alteração deve ser transparente para os outros objetos que se beneficiarão desse aprimoramento
A linguagem natural do código facilita o entendimento por parte dos desenvolvedores
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Extensível
Um software não é estático
●Manutenções evolutivas
●Manutenções adaptativas
Usuários constantemente solicitam acréscimos de novas funcionalidades
Herança e polimorfismo também são recursos de extensão
Introdução à Programação Orientada a Objetos
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Extensível (cont.)
Exemplo da classe aluno em um sistema acadêmico
LOO - Linguagens Orientadas a Objetos 49
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Oportuno
Facilita a divisão de um projeto em ciclos de desenvolvimento: projetos iterativos e incrementais
Cada ciclo produz um software confiável, reutilizável e extensível
O software natural otimiza os ciclos de projeto, permitindo que o desenvolvedor se concentre apenas no problema a ser resolvido
LOO - Linguagens Orientadas a Objetos 50
Vantagens e Objetivos (cont.) Vantagens e Objetivos (cont.)
Oportuno (cont.)
A implementação de várias classes pode ocorrer em paralelo e de forma independente
O desenvolvimento em paralelo reduz o tempo final de desenvolvimento de um projeto
preservando a qualidade do software
Introdução à Programação Orientada a Objetos
Armadilhas Armadilhas
Armadilha 1: Pensar na POO simplesmente como uma linguagem
É possível utilizar uma linguagem orientada a objetos e não realizar programação orientada a objetos
Um código de péssima qualidade pode ser escrito utilizando uma linguagem orientada a objetos
Introdução à Programação Orientada a Objetos
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 1: Pensar na POO simplesmente como uma linguagem (cont.)
A verdadeira POO exige que os problemas a serem resolvidos por um software sejam abordados com foco na orientação a objetos e correta utilização dos seus conceitos
Antes de se aprender um linguagem orientada a objetos é necessário que os conceitos de POO estejam muito bem consolidados
LOO - Linguagens Orientadas a Objetos 53
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 2: Medo da reutilização
Aprender a reutilizar código é uma das lições mais difíceis de se aprender
A primeira dificuldade está em lidar com a criatividade do programador:
●Programadores gostam de criar
●A reutilização pode parecer um fator inibidor para a criatividade dos programadores
●Porém, a reutilização de componentes de forma criativa permite a construção de algo ainda melhor
LOO - Linguagens Orientadas a Objetos 54
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 2: Medo da reutilização (cont.)
A segunda dificuldade está em confiar em algo escrito por outra pessoa:
● Se um software está bem testado e atende às suas necessidades, você deve reutilizá-lo
● Reutilizar componentes economiza tempo e libera o programador para escrever software de alta qualidade
Introdução à Programação Orientada a Objetos
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 3: Pensar na OO como uma solução para tudo
Apesar de todas as vantagens, POO não é a melhor solução para tudo no mundo da programação
O bom senso e a experiência devem ser utilizados na escolha das alternativas para desenvolvimento de um software
Introdução à Programação Orientada a Objetos
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 3: Pensar na OO como uma solução para tudo (cont.)
POO não garante o sucesso de um projeto
O sucesso de um software está diretamente ligado à qualidade das fases de planejamento, projeto e codificação
LOO - Linguagens Orientadas a Objetos 57
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 4: Programação egoísta
Não seja egoísta ao programar
Assim como você deve aprender a reutilizar, você deve aprender a compartilhar o código que cria
Compartilhar significa tornar o código criado facilmente reutilizável
LOO - Linguagens Orientadas a Objetos 58
Armadilhas (cont.) Armadilhas (cont.)
Armadilha 4: Programação egoísta (cont.)
Desenvolva interfaces limpas e inteligíveis
Escreva documentação:
● classes
● atributos
● métodos
● parâmetros de métodos
Ninguém utiliza o que não consegue encontrar ou compreender
Introdução à Programação Orientada a Objetos
Revisão Revisão
Quais as vantagens da programação modular em relação à programação procedural?
Liste uma deficiência da programação procedural e da programação modular.
O que é programação orientada a objetos?
Quais são as seis vantagens e objetivos da POO?
Explique três dessas vantagens.
Introdução à Programação Orientada a Objetos
Revisão (cont.) Revisão (cont.)
Defina os seguintes termos: classe, objeto propriedade e método.
Como os objetos se comunicam entre si?
O que é um método construtor?
O que é um método acessor ?
O que é um método mutante ?
Quais são as quatro armadilhas da POO?
Explique duas dessas armadilhas.
LOO - Linguagens Orientadas a Objetos 61