• Nenhum resultado encontrado

Introdução. à Programação Orientada a Objetos. Histórico (cont.)

N/A
N/A
Protected

Academic year: 2022

Share "Introdução. à Programação Orientada a Objetos. Histórico (cont.)"

Copied!
16
0
0

Texto

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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)

(6)

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)

(7)

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;

}

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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.

(16)

LOO - Linguagens Orientadas a Objetos 61

D D úvidas ú vidas

Referências

Documentos relacionados

– Crie um construtor parametrizado inicializando todas as variáveis com os valores recebidos dos parâmetros. – Crie um construtor default (Inicializando as variáveis da

• Diferentes componentes de um sistema não devem revelar detalhes internos de suas..

• É possível comprar acessando o método comprar, passando como parâmetro dois objetos, um do tipo Pessoa e outro do tipo Produto.. M.; Programação Orientada

– É o processo de esconder todos os detalhes de um objeto que não contribuem para suas características

– Pode ser acessado por qualquer outra classe em qualquer outro pacote.

• Projeção de classes genéricas que podem ser especializadas em classes mais particulares3. • Classes especializadas reutilizam o código das

– Método executado depende da classe do objeto – Mesma chamada executa métodos diferentes.. • obj.metodo() vai executar método que foi definido para classe do objeto

– Classe deve implementar TODOS os métodos definidos na interface.. Implementação