Introdução à Linguagem de Programação JAVA Aula 01 Introdução ao Paradigma de Orientação a Objetos Tópicos da Aula • Paradigma Orientado a Objetos – OOA – OOD – OOP • Componentes • Propriedades – OOPL Paradigma de Orientação a Objetos • OOA (Object Oriented Analysis) • OOD (Object Oriented Design) • OOP (Object Oriented Programming) – OOPL (Objetc Oriented Programming Language) Análise Orientada a Objetos (OOA) • Visualização do mundo através de objetos com estruturas de dados, comportamentos e eventos que disparem operações, ou mudanças no comportamento e estado dos objetos. – Especificações e Requisitos Benefícios da OOA • Mapeamento simplificado do mundo real • Menor esforço de análise • Facilidade de verificação pelo usuário • Baixa complexidade de desenho do sistema Desenho Orientado a Objetos (OOD) • Modelagem de um sistema de software que implemente os requisitos identificados utilizando classes e objetos. – Modelo de Objetos Benefícios da OOD • Mapeamento simplificado do domínio do problema • Menor esforço de análise • Melhor produtividade no mapeamento direto para Linguagens Orientadas a Objeto Programação Orientada a Objetos (OOP) • Forma de programação que faz uso de conceitos e componentes inerentes do paradigma de orientação a objetos – Componentes de OOP – Propriedades de OOP Componentes de OOP • Componentes de OOP – Objetos – Classes – Instâncias – Métodos – Mensagens Benefícios de OOP • • • • Simplicidade de implementação Reutilização de código Desenvolvimento evolutivo Manutenção (em teoria) mais simples Objeto • Def.: Objeto é uma abstração composta por dados e operações correlatos. Cada objeto possui: – Identidade – Estado – Comportamento Identidade do Objeto • Def.: Identidade é o mecanismo que distingue um objeto dos demais. – A identidade do objeto se mantém mesmo que seu estado seja alterado Estado do Objeto • Def.: Estado de um objeto é o dado armazenado no objeto e modificado por meio dos operações (métodos) suportados pelo objeto. – Características herdadas ou próprias do objeto Comportamento do Objeto • Def.: Comportamento de um objeto é um conjunto de operações (métodos) que o objeto suporta para alterar o seu estado, assim como as invariantes que estes métodos satisfaçam. – Modo como um objeto age e reage à estímulos externos Programaticamente • Objeto é uma estrutura composta por variáveis e métodos relacionados. – Identidade – endereço de memória (maioria das linguagens) – Estado – variáveis – Comportamento – métodos Representação Classe • Def.: Classe representa uma especificação de tipo de objeto, definindo os dados e operações que cada objeto pode possuir. Programaticamente • Classe é uma descrição de um tipo de objeto, onde são definidas suas variáveis e métodos. Representação Instância • Def.: Cada objeto é dito ser uma instância de uma classe. – cada instância (objeto) de uma classe possui seu próprio estado, mas apresentam as mesmas definições de estado e comportamento que as demais instâncias da classe. Programaticamente • Objetos são instâncias de uma classe particular. Método • Def.: O comportamento de um objeto é expresso por meio de seus métodos, onde são definidas todas as formas interações possíveis com o objeto. Programaticamente • Um método é uma implementação específica de uma operação para uma certa classe. Mensagem • Def.: Uma mensagem é uma informação que é enviada de um objeto para outro. – Troca de mensagens é a forma de comunicação entre objetos Programaticamente • Uma mensagem corresponde a uma chamada a um método de um objeto. Representação Propriedades de OOP • • • • Abstração Encapsulamento Herança Polimorfismo Abstração • Consiste de, mentalmente, separar os aspectos essenciais e inerentes de um elemento (coisa, elemento, etc) de um conjunto ou totalidade mais complexa. Programaticamente • Exame seletivo de determinados aspectos de um problema, isolando os mais importantes e suprimindo os que não forem – Redução de escopo – Foco no essencial Encapsulamento • Consiste em separar os aspectos externos de um objeto, acessíveis por outros objetos, dos detalhes internos de implementação do objeto, que permanecem ocultos dos demais objetos. Programaticamente • Cada tipo de objeto especifica uma interface através da qual outros objetos podem interagir com ele – somente através dos métodos internos do objeto pode-se acessar seu estado – objetos não podem alterar o estado interno de outros objetos de maneira inesperada Herança • Mecanismo que permite que características de estado e comportamento sejam compartilhadas entre classes segundo um relacionamento hierárquico Programaticamente • Classes podem ser definidas como extensões de uma classe existente – Hierarquia de classes Polimorfismo • Propriedade pela qual uma mesma operação representa comportamentos diferentes em classes diferentes. Programaticamente • Classes distintas podem implementar o mesmo método de maneiras distintas. Linguagens OOP (OOPL) • Linguagem que permita suporte, em algum grau, aos conceitos de OO – Linguagens OO “puras” – desenvolvidas para facilitar (até mesmo forçar) programação OO – Linguagens híbridas – linguagens estruturadas estendidas para suporte OO Algumas OOPLs – – – – – – – – – Simula (1967) – Norwegian Computing Centre Smalltalk (1971) - Xerox PARC Modula-2 (1978) – ETH Eiffel (1985) – Interactive Software Engineering C++ (1985) – Bell Labs VB (1991) - Microsoft Delphi (1995) – Borland Java (1995) – Sun Microsystems C# (2001) - Microsoft