27
Programação Orientada a Objetos Curso Profissional de Gestão e Programação de Sistemas Informáticos Disciplina: Programação e Sistemas de Informação Módulos 9/10/11 POO 2016/2017

Disciplina: Programação e Sistemas de Informação · Programação Orientada a Objetos ... •Object Pascal (1986) •Common Lisp (1986) •C++ (1986) •Java (1990) •Python

Embed Size (px)

Citation preview

Programação Orientada a Objetos

Curso Profissional de Gestão e Programação de Sistemas Informáticos

Disciplina: Programação e Sistemas de Informação

Módulos 9/10/11 – POO

2016/2017

História

A OO surgiu no final da década de 60, quando dois cientistasdinamarqueses criaram a linguagem Simula.

O termo POO foi introduzido com a linguagem Smalltalk (1983)

No final dos anos 80 surgiu o Paradigma de Orientação a Objetos.

HistóriaLinguagens orientadas a objetos:

• Smalltalk (1972)

• ADA (1983)

• Eiffel (1985)

• Object Pascal (1986)

• Common Lisp (1986)

• C++ (1986)

• Java (1990)

• Python (1990)

• Perl 5 (2005)

Programação estruturada vs POO

Mundo RealVisão do Mundo orientada por Objetos

vivemos num mundo de objetos

estes objetos existem na natureza◦ feitos pelo homem

◦ como produtos que usamos ..

podem ser◦ criados

◦ categorizados

◦ descritos

◦ organizados

◦ combinados

◦ manipulados

Noção de ObjetoA noção de Objeto na Engenharia de SW OO

Baseia-se nas propriedades fundamentais:

◦ independência de contexto => reutilização

◦ abstração de dados => abstração

◦ encapsulamento => abstração e proteção

◦ modularidade => desenvolvimento feito por composição de partes simples

Um Objeto é o módulo computacional básico e único que corresponde

à representação abstrata de uma entidade autónoma

Noção de ObjetoUm Objeto é constituído por:

um identificador único

um conjunto privado de atributos (estado interno)◦ variáveis de instância

um conjunto de operações◦ métodos de instância

são as únicas a poderem aceder aoestado interno e que no seu conjuntodefinem o comportamento do objeto

As operações podem ser:◦ públicas - constituem a sua interface (API)◦ privadas - apenas podem ser usadas por

operações internas(não são visíveis do exterior)

Objeto Triangulo

Variáveis de InstânciaPonto p1 = (10,2)

Ponto p2 = (0,5)

Ponto p3 = (3,7)

Métodos de Instância

void desenha()

void roda(int x)

int perimetro()

boolean equilatero()

Objetos, Instâncias e ClassesClasse – entidade que tem dois objetivos

◦ contem a descrição da estrutura e comportamento de objetos da mesma “família”

(mesmas variáveis de instância e métodos)

◦ cria esses objetos (todos com a mesma estrutura e comportamento)

Instâncias são os objetos criados pelas classes

◦ Um objeto é instância de uma única classe

◦ Um objeto apenas pode ser criado por uma única classe

◦ Uma classe pode ter (criar) várias instâncias

◦ Instâncias da mesma classe

◦ têm igual estrutura e comportamento

◦ diferem nos valores que estão nas variáveis de instância

CLASSE Triangulo

Variáveis de Instância

Ponto p1

Ponto p2

Ponto p3

Métodos de Instânciavoid desenha()

void roda(int x)

int perimetro()

boolean equilatero()

p1

p2

p3

(10,2)

(0,5)

(3,7)

void desenha()

void roda(int x)

int perimetro()

boolean equilatero()

triang1

Objeto

Classe

instância

Instanciação – processo que cria um objeto a partir de uma classe

Instância – objeto resultante do processo de instanciação

CLASSE Triangulo

Variáveis de Instância

Ponto p1

Ponto p2

Ponto p3

Métodos de Instânciavoid desenha()

void roda(int x)

int perimetro()

boolean equilatero()

p1

p2

p3

(10,2)

(0,5)

(3,7)

void desenha()

void roda(int x)

int perimetro()

boolean equilatero()

triang1

p1

p2

p3

(1,1)

(3,5)

(-4,0)

void desenha()

void roda(int x)

int perimetro()

boolean equilatero()

triang2

p1

p2

p3

(1,2)

(0,5)

(3,7)

void desenha()

void roda(int x)

int perimetro()

boolean equilatero()

triang3

Objeto

Classe

Objeto

Objeto

instância

instância

instância

MétodosOs métodos são as ações que a classe pode realizar.

É cada uma das operações (subprogramas) aplicadas ao objeto. Num programa, um método é a implementação de uma função.

Método Construtor - Método utilizado para iniciar automaticamente osdados das instâncias de uma classe. Possui o mesmo nome da classe.Não possui retorno e é chamado no momento que a instância é criada.

Método Destrutor - Método utilizado para destruir automaticamenteos dados das instâncias de uma classe. Possui o mesmo nome da classe,precedido de ~. Não possui retorno e é chamado no momento que ainstância é liberada.

InterfaceA interface é o contacto entre a Classe e o mundo externo, assim sendoquando uma classe implementa uma interface está comprometida afornecer o comportamento publicado pela interface

POO – O PARADIGMA

Polimorfismo

As classes fazem a mesma operação (método) mas de forma diferente.

POO – O PARADIGMA

HerançaAs classes relacionam-se entre si de modo a partilharem e enriquecerem

as definições das estruturas e comportamentos das suas instâncias

Objetivo – reutilização◦ definir uma vez e reutilizar n vezes

Formas de reutilização

◦ Herança simples

◦ Herança Múltipla

◦ Delegação

superclasse

subclasse

HerançaUma classe:

- é criada como subclasse de uma superclasse herdando as especificações (estado e comportamento) desta última

- pode acrescentar estado e comportamento ao herdado da sua superclasse bem como alterar o comportamento que herda

classe: mobília

custo

dimensões

peso

cor

compra

vende

move

classe: cadeira

custo

dimensões

peso

cor

pernas

compra

vende

move

forra

a classe cadeira

herda (é subclasse)

da classe mobília

e pode definir

atributos e

operações

próprias

HerançaHerança simples

uma classe herda a estrutura

e comportamento definido

na sua superclasse e acrescenta à

estrutura e comportamento com

as suas próprias definições

Sistema Hierárquico de classes

Hierarquia de Classes

mobilia

mesa cadeira armário

armário de WC armário de sala

uma classe

apenas tem

uma superclasse

HerançaHerança Múltipla

• idêntica à herança simples

com a diferença de que

uma classe pode herdar

de várias superclasses

em simultâneo

veículos

terrestres aquáticos aéreos

hovercrafts

uma classe

pode ter mais do que

uma superclasse

Herança e Classes DerivadasClasse-base – classe que serve de base à criação de outra classe;

Classe-derivada – classe que é criada a partir de outra classe.

Derivação de classes – criação de classes a partir de outras.

Herança – uma classe derivada herda, em princípio, todos os membros(variáveis ou atributos e funções ou métodos) da sua classe base.

Uma classe derivada, para ter razão de ser, deverá ter os seus elementospróprios, a nível de atributos e métodos (variáveis e funções), nuns casos,inteiramente novos, noutros casos, readaptados da classe-base.

Uma classe derivada também pode servir de classe-base de uma outraclasse, logo podemos construir uma estrutura com vários níveis dehierarquia entre classes-base e derivadas – hierarquia de classes.

Exemplo

Derivação de Classes

A derivação de classes com herança das classes-base e com as suas

características próprias, juntamente com a possibilidade de criarmos e

utilizarmos objetos de todas essas classes constitui, em traços gerais, a

essência da programação orientada para objetos.

Abstração

O termo “abstração”, aplicado em programação significa “a grossomodo”, ou seja, só deve ser representado o que vai ser utilizado.

EncapsulamentoUm objeto é uma cápsula que contém dados e métodos. Os dados apenas podem ser manipulados pelos seus métodos (públicos ou privados)

Os seus métodos privados, tal como os dados, estão fechados dentro da mesma cápsula, não sendo visíveis do exterior

Este conceito permite atingir◦ a independência do contexto

◦ a facilidade de reutilização

◦ a facilidade de deteção de erros

◦ modularidade

Estrutura de dados privada

método público 1

método público 2

método público 3

método privado 1

EncapsulamentoÉ um dos princípios da O.O., no qual a estrutura de um objeto só é acessível através demensagens enviadas ao objeto. Assim, encapsular significa esconder a estrutura de dados.O encapsulamento determina que uma classe consiste em duas partes:

Parte Invisível ou Privativa: formada pelas variáveis de instâncias e implementação dosmétodos (em C++ a parte privada é especificada pela palavra reservada private).

Parte Visível ou Pública: formada pelas assinaturas dos métodos. (em C++ a parte publicaé especificada pela palavra reservada public).

POO – O PARADIGMA

MensagensOs objetos interagem entre si através de um mecanismo de envio e receção de mensagens

Uma mensagem é:

◦ uma invocação de um método público do objeto recetor da mensagem

◦ esta invocação é feita através da indicação do nome do método e de parâmetros adicionais para

a sua execução

◦ o emissor passa o controlo de execução ao recetor da mensagem

◦ o resultado da execução deste método é retornado ao objeto emissor da

mensagem

◦ o recetor devolve o controlo de execução ao emissor da mensagem

MensagensComunicação por mensagens

através de mensagens um objeto

ativa métodos, envia dados e recebe

dados de outros objetos

o envio de uma mensagem

implica a transferência de controlo

Sequência:

1- o emissor envia mensagem ao recetor

◦ o emissor pára, à espera que o recetor

lhe devolva o resultado da execução

2- o recetor executa o método associado à mensagem

3- quando termina a execução do método,

o recetor devolve o resultado e o controlo ao emissor

◦ o emissor pode então continuar a executar

1

3

2

Noção de Programa em POOUm Programa em POO é o resultado da computação gerada pela interação

(troca de mensagens) entre os vários objetos que o constituem.

Um programa OO é constituído apenas por objetos, que por sua vez são

criados a partir de classes.

Um programa OO é construído com base:

◦ nas classes que irão criar os objetos que o constituem

◦ numa mensagem inicial, a ser enviada a uma classe, que irá desencadear todo o

processo de construção dos objetos que o constituem

Processo de explosão