Linguagens e Técnicas de Programação II Modelagem Orientada a Objetos Renato Dourado Maia Universidade Estadual de Montes Claros Sistemas de Informação
Lembrando Na Unidade I Gerenciando a Complexidade, vimos: Um sistema de software é inerentemente complexo e muitas vezes ultrapassa a capacidade intelectual humana. Sistemas complexos podem ser analisados a partir de sua decomposição em coisas, os objetos, que têm estado e comportamentos próprios. A complexidade da decomposição pode ser organizada na forma de uma hierarquia com duas relações básicas: é um tipo de e é parte de ; Os sistemas complexos geralmente evoluem a partir de formas estáveis mais simples. 2/42
Unidade II Na Unidade II Modelagem Orientada a Objetos, veremos: Como utilizar a metodologia OO para organizar a complexidade de sistemas de software. Quais os principais mecanismos que poderão ser utilizados para isso. Uma introdução à análise e ao projeto orientado a objetos. 3/42
Unidade II Unidade II Modelagem Orientada a Objetos: A Evolução dos modelos orientados a objetos. A abstração de objetos: encapsulamento, interface e implementação. Reutilizando a implementação. Reutilizando a interface por intermédio de herança. Objetos intercambiáveis: polimorfismo. Introdução à Análise e ao Projeto Orientado a Objetos u- tilizando a UML (Unified Modeling Language). 4/42
Modelos OO Evolução A análise e o projeto orientados a objetos constituem uma metodologia que nos leva a uma decomposição orientada a objetos de um sistema. Os modelos resultantes serão centrados nos objetos (coisas/entidades) que compõem o sistema. A análise OO é bastante diferente da análise estruturada, que é centrada nos procedimentos. 5/42
Modelos OO Evolução Vários tipos de modelos, cada um capturando aspectos distintos do sistema, poderão ser criados: Modelo Lógico: estrutura de classes e objetos. Modelo físico: módulos e processos. Os modelos OO surgiram como consequência da própria evolução das linguagens de programação... 6/42
Modelos OO Evolução O processo de abstração também evoluiu! Lembrando: Abstrair consiste no processo de retirar do domínio do problema os detalhes relevantes e representá-los não mais na linguagem do domínio, e sim na linguagem da solução. 7/42
Modelos OO Evolução No contexto da engenharia, abstrair corresponde a criar modelos que serão utilizados para a resolução do problema. Problema ABSTRAÇÃO Modelo 8/42
Modelos OO Evolução Diferentes Abstrações 9/42
Modelos OO Evolução O processo de abstração também evoluiu: Todas as linguagens de programação fornecem meios para a criação de abstrações. A linguagem Assembly é uma pequena abstração da máquina na qual os programas são executados. Linguagens imperativas, como BASIC, FORTRAN e C, são abstrações da linguagem Assembly: Nessas linguagens, é necessário pensar em termos da estrutura do computador, ao invés de se pensar em termos da estrutura do problema a ser resolvido! 10/42
Modelos OO Evolução O processo de abstração também evoluiu: O programador deve estabelecer uma associação entre o modelo da máquina (no espaço da solução) e o modelo do problema que está sendo resolvido (no espaço do problema). O esforço para fazer esse mapeamento pode ser grande... 11/42
Modelos OO Evolução O processo de abstração também evoluiu: A programação orientada a objetos tenta trazer o espaço da solução para o espaço do problema: ambos são representados como objetos! O programa permite adaptação ao problema por meio da adição de novos tipos ao espaço da solução que mapeiam os tipos existentes no espaço do problema: descreve-se o problema em termos do problema e não em termos da solução! Vocês conseguem perceber como isso é fantástico? 12/42
Modelos OO Evolução O processo de abstração também evoluiu: Cada objeto funciona como uma pequena parte do problema, possuindo seu estado e suas operações, o que é semelhante ao que acontece com os objetos do mundo real, que possuem características e comportamentos. O mundo computacional se aproxima mais do mundo real... 13/42
A Abstração de Objetos O que são objetos? 14/42
A Abstração de Objetos Um objeto é uma variável, e armazena dados... Então, uma struct é um objeto? Sim, uma struct é um objeto. Entretanto, um objeto é mais abrangente do que uma struct: pode-se pedir que determinadas operações sejam realizadas sobre os objetos. Assim, um objeto possui atributos, que são os dados, e comportamentos, que são os métodos, procedimentos ou funções que atuam sobre ele. Exemplos de objetos: pessoas, carros, empresas, etc.. 15/42
A Abstração de Objetos Programação Estruturada Programação Orientada a Objetos Objeto Dados Funções Atributos (Dados) Métodos (Funções) 16/42
A Abstração de Objetos O QUE É UM PROGRAMA EM LINGUAGEM OO? 17/42
A Abstração de Objetos Um programa em linguagem OO é um conjunto de objetos dizendo uns para os outros o que fazer por meio do envio de mensagens... As mensagens, na verdade, podem ser enxergadas como chamadas a funções que pertencem a um objeto específico. Cada objeto tem sua própria região de memória, que pode, inclusive, ser composta por outros objetos, e tem um tipo, isto é, pertence a uma classe. 18/42
Objetos e Interfaces Os objetos, apesar de únicos, fazem parte de uma classe de objetos, possuindo, portanto, características comuns. A criação de tipos abstratos de dados, as classes, constitui um conceito fundamental da programação OO: Tipos de dados abstratos funcionam de maneira similar aos tipos fundamentais: Podem ser criadas variáveis do tipo: objetos/instâncias. As variáveis podem ser manipuladas. 19/42
Objetos e Interfaces Os objetos de cada classe possuem algumas coisas em comum: Toda conta possui um extrato, todo caixa pode aceitar um depósito... Todo objeto tem seu próprio estado: Cada conta tem um extrato diferente, cada caixa tem o seu nome... Assim, caixas, clientes, contas, transações podem, cada um, ser representados por uma única entidade no programa, o objeto. 20/42
Objetos e Interfaces Cada objeto pertence a uma classe, que define o seu comportamento e as suas características. 21/42
Classes 22/42
Objetos e Interfaces Depois que uma classe é criada, podem ser criados tantos objetos da classe quanto necessários, que podem ser manipulados como se fossem elementos existentes no problema que está sendo solucionado. Mas como fazer um objeto realizar um trabalho útil? 23/42
Objetos e Interfaces Cada objeto possui métodos (funções) para desempenhar suas atividades. Cada objeto somente pode responder a determinadas requisições. O conjunto de métodos de um objeto é conhecido como sua interface. 24/42
Objetos e Interfaces Lâmpada Lampada Nome da classe UML liga(); desliga() aumenta_luminosidade(); diminui_luminosidade(); Interface Instanciando um objeto e chamando um método: Lampada Luz; Luz.liga(); 25/42
Objetos e Interfaces Que métodos (funções) podem ser chamados? Isso é a interface! Onde esses métodos estão codificados, como são implementados? Isso é a implementação! Geralmente não interessa a quem utiliza o objeto conhecer os detalhes da implementação... 26/42
Interface, Implementação e Encapsulamento Um objeto pode ser encarado como um servidor, programado pelo criador da classe. O cliente do objeto utiliza os métodos por meio de sua interface. O criador da classe expõe o mínimo da interface para o cliente, escondendo o resto. Por quê? Porque se está escondido, pode ser mudado sem que o programa do cliente seja quebrado. Se fosse dado total acesso à implementação interna, o cliente poderia quebrar a integridade do objeto. 27/42
Encapsulamento A estratégia utilizada para garantir que determinadas partes de uma classe não possam ser a- cessadas pelo público em geral é chamada controle de acesso... A interface não apresenta necessariamente todos os métodos de um objeto, mas apenas aqueles que podem ser acessados pelo público em geral, os métodos públicos. Os métodos internos aos objetos são os métodos privados. 28/42
Encapsulamento Videocassete público: Play(); FastForward(); Rewind(); Record();... privado: PosicionaCabecaGravacao(posicao); GiraMotor(velocidade);... Público x Privado 29/42
Encapsulamento 30/42
Reutilizando a Implementação Uma vez que uma classe foi criada e testada, ela pode ser utilizada para auxiliar na implementação de outras classes. Essa é uma das principais vantagens da Programação Orientada a Objetos. 31/42
Reutilizando a Implementação A forma mais simples de reutilização é utilizar um objeto daquela classe diretamente. Exemplos: janela no Windows, matriz em um programa de cálculo, etc... Pode-se, também, utilizar um objeto de uma classe dentro de uma nova classe: Sua classe pode ser composta pelo número e tipo de objetos que se fizerem necessários! Composição 32/42
Reutilizando a Implementação REUTILIZAÇÃO UTILIZAR O OBJETO DA CLASSE DIRETAMETE UM CARRO CONTÉM 4 RODAS, UM MOTOR, UMA LATARIA... UTILIZAR UM OBJETO DE UMA CLASSE DENTRO DE UMA NOVA CLASSE COMPOSIÇÃO VERBOS ASSOCIADOS: CONTER, POSSUIR 33/42
Reutilizando a Implementação Composição Notação UML Carro Videocassete 4 1 1 CabecaDeGravacao ControleDeMotor Roda Motor Lataria Motor CabecaDeLeitura 34/42
Reutilizando a Interface Herança A herança permite a criação de uma hierarquia de classes: classes mais especializadas as classes filhas, herdam propriedades da classe mais geral a classe pai. Pode-se compartilhar automaticamente métodos e dados entre diferentes classes, subclasses e objetos Cria-se uma nova classe programando-se apenas as diferenças entre a classe e a classe pai: a classe filha herda a interface da classe pai, podendo substituí-la quando se espera um objeto da classe pai!!! EXPRESSÃO TÍPICA: É UM TIPO DE... 35/42
Reutilizando a Interface Herança Herança Exemplo 1 Ave é um tipo de Animal. Mamífero é um tipo de Animal. Ave come, dorme, voa e botaovo. Mamífero come, dorme e mama. Uma Ave, ou um Mamífero, podem substituir um Animal, pois são tipos de Animal, e, portanto, possuem a mesma interface base! Que delícia crocante!!! 36/42
Reutilizando a Interface Herança Herança Exemplo 2 Triangle, Square e Circle são tipos de Shape, possuem a mesma interface base, e podem substituir Shape... 37/42
Reutilizando a Interface Herança Herança Exemplo 2 Cada tipo de Shape deve ter o seu próprio método draw, pois cada uma se desenha de modo diferente! Os métodos podem ser sobrescritos nas classes derivadas! Deseja-se utilizar a mesma interface, mas com um comportamento um pouco diferente para a classe derivada. Que delícia crocante de novo!!! 38/42
Objetos Intercambiáveis: Polimorfismo Quando trabalhamos com hierarquias, em muitas vezes queremos tratar um objeto não por seu tipo específico, mas por seu tipo base: isso permite escrever código que não depende do tipo específico e, consequentemente, a adição de novos tipos sem maiores dificuldades: Por exemplo, no caso das Shapes, poderíamos escrever código genérico que as manipulasse, mandando-as se desenharem, por exemplo, sem nos preocuparmos se são triângulos, círculos ou qualquer outra coisa... Adicionar novos tipos é uma das formas mais comuns de estender um programa orientado a objetos para tratar novas situações! 39/42
Objetos Intercambiáveis Polimorfismo Isso é o polimorfismo o que possui várias formas : Propriedade de se utilizar o mesmo nome para métodos diferentes, implementados em diferentes níveis de uma hierarquia de classes. Para cada classe, tem-se um comportamento específico para o método. 40/42
Mensagem Final Não se preocupem demais, no momento atual, com os conceitos: tudo ficará claro depois! 41/42
Importante Esta apresentação é uma adaptação do material originalmente desenvolvido pelo professor Renato Cardoso Mesquita, do Departamento de Engenharia Elétrica da Universidade Federal de Minas Gerais. http://www.cpdee.ufmg.br/~renato/ 42/42