Mind map
Paradigma orientado a objetos

Map content
Paradigma orientado a objetos
Motivação
- Um dos problemas da programação estruturada é que, muitas vezes, partes do código que servem apenas para tratar os dados se misturam com partes do código que tratam da lógica do algoritmo
- Essa prática não é saudável, na medida em que diminui a reusabilidade e dificulta leitura, depuração e manutenção
- A orientação a objetos é um paradigma que se baseia na abstração de coisas ou objetos do mundo real em um sistema de forma potencialmente reusável
Vantagens do paradigma OO
- Grande ênfase na reusabilidade de classes melhorando a Agilidade
- Permite que programas sejam escritos mais rapidamente
- Suporta a demanda atual de desenvolvimento de software que exige soluções disponíveis em tempo cada vez menor
- Escalabilidade: Softwares construídos seguindo os preceitos da orientação a objetos são mais escaláveis
- Podem crescer facilmente sem aumentar demasiadamente sua complexidade ou comprometer seu desempenho
- É possível construir tanto um software da Padaria do Joãozinho quanto o sistema que controla o Acelerador de Partículas da NASA
- Caráter unificador
- Trata todas as etapas do desenvolvimento de sistemas e ambientes sob uma única abordagem
- Pode-se ter análise, projeto, modelagem, implementação, banco de dados e ambientes orientados objetos
- Isso elimina as diferenças de paradigmas utilizadas em cada um desses contextos
- Visualiza um sistema de software como uma coleção de agentes interconectados chamados objetos
- Cada objeto é responsável por realizar tarefas específicas e é pela interação entre objetos que uma tarefa computacional é realizada
- OO auxilia a modelagem de sistemas, reduzindo a diferença semântica entre a realidade sendo modelada e os modelos construídos
- Um sistema orientado a objetos consiste em objetos em colaboração com o objetivo de realizar as funcionalidades desse sistema
- Grande ênfase na reusabilidade de classes melhorando a Agilidade
Princípios básicos (ou pilares fundamentais)
- Abstração
- Características
- Abstração é a subtração de detalhes
- Quanto mais abstrato, há menos detalhes
- Quanto menos abstrato, há mais detalhes
- Processo mental pelo qual os seres humanos se atêm aos aspectos mais importantes (relevantes) de alguma coisa, ao mesmo tempo que ignoram os aspectos menos importantes
- Permite gerenciar a complexidade de um objeto, ao mesmo tempo, concentrar atenção nas características essenciais do mesmo
- Depende da perspectiva (contexto) sobre a qual uma coisa é analisada
- O que é importante em um contexto pode não ser em outro
- Abstração é a subtração de detalhes
- Classes abstratas x classes concretas
- Classe abstrata: Desenvolvida para representar entidades e conceitos abstratos
- Ela é sempre uma superclasse que não possui instâncias
- Define um modelo (ou template) para uma funcionalidade
- Fornece uma implementação incompleta (i.e., a parte genérica dessa funcionalidade) que é compartilhada por um grupo de classes derivadas
- Cada uma das classes derivadas completa a funcionalidade da classe abstrata adicionando comportamentos específicos
- Pode-se dizer, então, que se trata de um contrato para que alguma subclasse concretize seus métodos
- Classe abstrata x Interface: Dado uma classe qualquer, há 3 possibilidades:
- 1- Se ela tem pelo menos um método abstrato, será obrigatoriamente abstrata
- 2- Se ela tem todos os métodos abstratos, será obrigatoriamente abstrata
- Uma interface não é uma classe, mas sim uma entidade em que todos os métodos são obrigatoriamente abstratos
- Portanto, uma interface é praticamente uma classe abstrata
- Uma classe concreta ou abstrata ao implementar uma interface deverá escrever o corpo de todos os métodos
- 3- Se ela tem todos os métodos concretos, poderá ser concreta ou abstrata
- Classes concretas: Implementam todos os seus métodos e permitem a criação de instâncias
- Classes concretas são aquelas que podem ser instanciadas diretamente
- Classes abstratas são aquelas que NÃO podem ser instanciadas diretamente
- Métodos abstratos: Aqueles para os quais não é definida uma forma de implementação específica
- É possível haver uma classe abstrata contendo somente métodos concretos
- No entanto, se ela tiver um único método abstrato, que seja, deverá ser declarada como abstrata
- Classe abstrata: Desenvolvida para representar entidades e conceitos abstratos
- Características
- Encapsulamento
- Forma de restringir o acesso ao comportamento interno de um objeto
- O funcionamento interno do método que o objeto requisitado usa para realizar a operação não é conhecidos dos objetos requisitantes
- No entanto, o remetente da mensagem precisa conhecer pelo menos quais operações o receptor sabe realizar ou o que ele pode oferecer
- As classes descrevem seus comportamentos através de uma interface
- Interface é tudo que o objeto sabe fazer, sem precisar informar como ele sabe fazer
- Através do encapsulamento, a única coisa que um objeto precisa saber para pedir a colaboração de outro objeto é conhecer a sua interface
- Isso contribui para a autonomia dos objetos, pois cada objeto envia mensagens a outros para realizar certas operações, sem se preocupar em como elas foram realizadas
- Permite que a implementação de uma operação possa ser trocada sem o que objeto requisitante precise ser alterado
- Isso mantém as partes de um sistema tão independentes quanto possível
- Polimorfismo
- Capacidade de abstrair várias implementações diferentes em uma única interface
- Permite que a mesma mensagem seja enviada a diferentes objetos e que cada objeto execute a operação que é mais apropriada a sua classe
- Tipos de polimorfismo
- Polimorfismo ad-hoc: Todo aquele que ocorre em tempo de compilação
- Polimorfismo estático (Sobrecarga ou Overloading): Representado com o nome do método igual e parâmetros diferentes
- A decisão do método a ser chamado é tomada em tempo de compilação de acordo com os argumentos passados
- Parâmetros diferentes: Pode ser diferença na quantidade, tipo ou ordem dos parâmetros
- Observação sobre assinatura de métodos
- Dois métodos possuem a mesma assinatura se, e somente se, tiverem o mesmo nome e os mesmos parâmetros (quantidade, tipo e ordem dos parâmetros)
- As linguagens ignoram ou não o tipo de retorno para verificar se métodos possuem a mesma assinatura
- Java ignora
- C++ considera (não ignora)
- Polimorfismo de coerção: Suportado através da sobrecarga de operadores
- Ocorre quando se converte um elemento de um tipo no tipo apropriado para o método (casting implícito)
- Permite que um argumento seja convertido para o tipo esperado por uma função, evitando assim um erro de tipo
- Polimorfismo estático (Sobrecarga ou Overloading): Representado com o nome do método igual e parâmetros diferentes
- Polimorfismo Universal: Todo aquele que ocorre em tempo de execução
- Polimorfismo dinâmico (Sobrescrita ou Overriding): Associado com o conceito de herança e é representado com o nome e parâmetros do método iguais
- A subclasse redefine o método da superclasse e a decisão do método a ser chamado é tomada em tempo de execução
- Polimorfismo paramétrico (funções genéricas): Permite que se escreva um código genérico para servir os subtipos (que só serão descobertos em tempo de execução)
- Um mesmo objeto pode ser utilizado em diferentes contextos sem necessidade de quaisquer alterações
- Supondo listas de vários tipos: Carros, pessoas, animais ou filmes
- Pode-se realizar diversas operações nessas listas: acessar um elemento da lista, adicionar um elemento na lista, excluir um elemento da lista, atualizar um elemento da lista
- Essas operações servem para qualquer lista, independente de seu tipo
- Polimorfismo dinâmico (Sobrescrita ou Overriding): Associado com o conceito de herança e é representado com o nome e parâmetros do método iguais
- Polimorfismo ad-hoc: Todo aquele que ocorre em tempo de compilação
- Herança
- Classes semelhantes são agrupadas em uma hierarquia
- Cada nível dessa hierarquia pode ser visto como um nível de abstração relacionando classes e não objetos
- Facilita o compartilhamento de comportamento comum entre classes
- Herança múltipla é permitida em orientação a objetos
- Algumas linguagens, porém, como Java e .NET não permitem herança múltipla
- Esse recurso é evitado em algumas linguagens, pois ele pode causar problemas de ambiguidade
- Abstração
Images and files in the map
Information
- Description
- Engenharia de software Mind Map on Paradigma orientado a objetos, created by Michel Souza on 23/04/2018.
- Created by
- Michel Souza
- Views
- 0
- Rating









