GoConqr has a new look! Let us know what you think.

Mind map

Paradigma orientado a objetos

Michel Souza Engenharia de software Portuguese

Paradigma orientado a objetos

Map content

Paradigma orientado a objetos

  1. 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
  2. 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
  3. 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
      • 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
    • 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 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
    • 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

Images and files in the map

  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos
  • Paradigma orientado a objetos

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

Feedback

What is it about?

What do you think of the new look?

How do you like it?