Orientação a Objetos - 01

Preview:

Citation preview

Um mundo orientado a objetosProfessor Eduardo Henrique de Oliveira

Um mundo orientado a objetos

•O ser humano, no início de sua infância, aprende e pensa de uma maneira orientada a objetos, representando o seu conhecimento por meio de abstrações e classificações.

•Continuamos fazendo isso mesmo quando adultos mas desenvolvemos outras técnicas que também utilizamos em paralelo.

Um mundo orientado a objetos•A orientação a objetos, é um paradigma de

análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.

•O termo orientação a objetos pressupõe uma organização de software em termos de coleção de objetos discretos incorporando estrutura e comportamento próprios.

Um mundo orientado a objetos• O enfoque de modelagem por objetos, vê o

mundo como uma coletânea de objetos que interagem entre si, apresentam características próprias que são representadas pelos seus atributos (dados) e operações (métodos ou serviços).

• Resumidamente, a mudança de enfoque (entre estruturado e orientado a objetos) é justificada pelo fato de que objetos existem na natureza muito antes de haver qualquer tipo de aplicação deles pelo negócio.

Um mundo orientado a objetos

•Um objeto é uma entidade do mundo real que tem uma identidade.

•Objetos podem representar entidades concretas (um arquivo de música, uma bicicleta) ou entidades conceituais (uma estratégia de jogo, uma regra de um firewall).

Um mundo orientado a objetos

•Cada objeto ter sua identidade significa que dois objetos são distintos mesmo que eles apresentem exatamente as mesmas características.

Bicicleta do João Bicicleta da Maria

Um mundo orientado a objetos

•Embora objetos tenham existência própria no mundo real, em termos de linguagem de programação um objeto necessita um mecanismo de identificação.

•Esta identificação do objeto deve ser única, uniforme e independente do conteúdo do objeto.

Um mundo orientado a objetos

•A estrutura de um objeto é representada em termos de atributos.

Marca.Modelo.Cor.Nº marchas.Tamanho.

Um mundo orientado a objetos

•O comportamento de um objeto é representado pelo conjunto de operações (métodos) que podem ser executadas sobre o objeto.

Pedalar.Frear.Virar para esquerda.Virar para direita.Empinar.

Um mundo orientado a objetos

•Objetos com a mesma estrutura e o mesmo comportamento são agrupados em classes.

Classe Bicicleta

Um mundo orientado a objetos

•Uma classe é uma abstração que descreve propriedades (atributos e operações) importantes para uma aplicação e simplesmente ignora o resto.Marca.

Modelo.Cor.Nº marchas.Tamanho.

Pedalar.Frear.Virar para esquerda.Virar para direita.Empinar.

Classe Bicicleta

Um mundo orientado a objetos

•Cada classe descreve um conjunto de objetos individuais.

•Cada objeto é dito ser instância de uma classe.

Bicicleta do João(Instância da classe Bicicleta) Motocicleta do João

(Instância da classe Motocicleta)

Um mundo orientado a objetos

•Cada instância de uma classe tem seus próprios valores para cada atributo (estado), mas dividem os nomes dos atributos e métodos com as outras instâncias da classe.

Bicicleta do João(Instância da classe Bicicleta)

Bicicleta da Maria(Instância da classe Bicicleta)

Marca: CaloiModelo: CrossCor: AzulNº marchas: 1Tamanho: Aro 20

Marca: CaloiModelo: CeciCor: RosaNº marchas: 21Tamanho: Aro 24

Um mundo orientado a objetos

•Três princípios norteiam o paradigma da orientação a objeto:▫Polimorfismo.▫Herança.▫Encapsulamento.

Um mundo orientado a objetos

•Polimorfismo: a palavra polimorfismo vem do grego e significa que pode tomar várias formas.

•Encontramos geralmente três tipos de polimorfismo:▫ O polimorfismo ad hoc.▫ O polimorfismo paramétrico.▫ O polimorfismo de herança.

Um mundo orientado a objetos

• Polimorfismo ad hoc: permite ter funções do mesmo nome, com funcionalidades similares, em classes distintas.

• O polimorfismo ad hoc permite assim definir operadores cuja utilização será diferente de acordo com o tipo dos parâmetros que lhes são passados. É por isso possível, por exemplo, sobrecarregar o operador + e fazê-lo realizar ações diferentes conforme se trate de uma operação entre duas totalidades (adição) ou entre duas cadeias de caracteres (concatenação).

Um mundo orientado a objetos

•Polimorfismo paramétrico: representa a possibilidade de definir várias funções do mesmo nome mas possuindo parâmetros diferentes (em número e/ou tipo).

•O polimorfismo paramétrico torna assim possível a escolha automática do bom método a adotar em função do tipo de dado passado em parâmetro.

Um mundo orientado a objetos• Assim, pode-se por exemplo definir vários

métodos homônimos adição( ) efectuando uma soma de valores.▫ O método int addition (int, int) poderá dar a soma de

duas totalidades▫ O método float addition (float, float) poderá dar a soma

de dois flutuantes▫ O método char addition (char, char) poderá definir à

vontade do autor a soma de dois caracteres etc.

• Chama-se assinatura ao número e tipo (estático) dos argumentos de uma função. É por conseguinte a assinatura de um método que determina qual será chamado.

Um mundo orientado a objetos

•Polimorfismo de herança: a possibilidade de chamar o método de um objeto sem estar preocupado com o seu tipo intrínseco.

•Isto permite fazer abstração dos detalhes das classes especializadas de uma família de objeto, mascarando-o com um interface comum (que é a classe básica).

Um mundo orientado a objetos

•Imagine um jogo de xadrez que comporta os objetos rei, rainha, bispo, cavalo, torre e peão, herdando cada um do objeto peça.

Um mundo orientado a objetos

•O método movimento( ) poderá, graças ao polimorfismo de herança, efetuar o movimento adequado em função da classe do objeto remetido no momento da chamada.

Rainha.movimento( ) Bispo.movimento( )

Peao.movimento( )

Um mundo orientado a objetos

PEÇA

RAINHA

REI

BISPO

CAVALO

TORRE

PEÃO

movimento( )

movimento( )

movimento( )

movimento( )

movimento( )

movimento( )

movimento( )

(Polimorfismo de herança)

Um mundo orientado a objetos•A herança (em inglês inheritance) é um

princípio próprio à programação orientada para o objeto, permitindo criar uma nova classe a partir de uma classe existente.

•O nome “herança” (que pode às vezes ser chamada "derivação de classe") provém do fato de a classe derivada (a última classe criada) conter os atributos e os métodos da sua superclasse (a classe da qual deriva).

Um mundo orientado a objetos

•O interesse essencial da herança é poder definir novos atributos e novos métodos para a classe derivada, que vêm acrescentar-se aos herdados.

•Por este meio, cria-se uma hierarquia de classes cada vez mais especializadas.

•Isto tem a vantagem essencial de não ter de partir do zero quando se quer especializar uma classe existente.

Um mundo orientado a objetos

•Hierarquia de classes: representação da relação de parentesco que existe entre diferentes classes.

Um mundo orientado a objetos

•Inicia-se por uma classe geral chamada superclasse (às vezes classe básica, classe parente, classe antepassado, classe mãe ou classe pai, as metáforas genealógicas são numerosas).

•Seguidamente, as classes derivadas (classe filha ou sub-classe) tornam-se cada vez mais especializadas.

Um mundo orientado a objetos

•Assim, pode-se geralmente exprimir a relação que vincula uma classe filha à sua mãe pela frase “é um” (do inglês “is a”).

Classe pai

Classe filha

Um mundo orientado a objetos

•Herança múltipla: possibilidade herdar uma classe de duas superclasses.

Um mundo orientado a objetos

•Encapsulamento: é um mecanismo que consiste em reunir os dados e os métodos numa estrutura escondendo a implementação do objeto, ou seja, impedindo o acesso aos dados por um meio diferente dos serviços propostos.

•O encapsulamento permite por conseguinte garantir a integridade dos dados contidos no objeto.

Um mundo orientado a objetos• O utilizador de uma classe não tem

necessariamente de saber como estão estruturados os dados no objeto, isto significa que um utilizador não tem de conhecer a aplicação.

• Assim, proibindo o utilizador de alterar diretamente os atributos, e obrigando-o a utilizar as funções definidas para alterá-los (chamadas interfaces), podemos garantir a integridade dos dados (poderá por exemplo garantir que o tipo dos dados fornecido está conforme ao desejado, ou ainda que os dados se encontram no intervalo esperado).

Um mundo orientado a objetos

•O encapsulamento permite definir níveis de visibilidade dos elementos da classe. Estes níveis de visibilidade definem os direitos de acesso aos dados e operações conforme este acesso seja por um método da própria classe, de uma classe herdeira, ou de uma classe qualquer.

Um mundo orientado a objetos•Existem três níveis de visibilidade:

▫ pública: as funções de todas as classes podem acessar os dados ou os métodos de uma classe definida com o nível de visibilidade pública. Trata-se de mais baixo nível de proteção de dados▫ protegida : o acesso aos dados está reservado às funções das classes herdeira, ou seja, às funções membros da classe, bem como as classes derivadas▫ privada: o acesso aos dados é limitado aos métodos da própria classe. Trata-se do nível de proteção dos dados mais elevado.

Um mundo orientado a objetos• Abstração OO: Habilidade mental que permite

aos seres humanos visualizarem os problemas do mundo real com vários graus de detalhe, dependendo do contexto corrente do problema. [Rumbaugh]

• Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.

Atividade práticaPara a próxima aula:Relacionar 10 (dez) objetos com os seus atributos e operações. Identificar entre quais há uma relação de herança e montar o diagrama de hierarquia de classes.

Dúvidas ?