𝖂𝖎ƙ𝖎𝖊

Orientação a objetos

Predefinição:Orientação 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.

Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação. De fato, o paradigma "orientação a objeto", tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligência artificial e da linguística, no campo da abstração de conceitos do mundo real. Na qualidade de método de modelagem, é tida como a melhor estratégia para se eliminar o "gap semântico", dificuldade recorrente no processo de modelar o mundo real do domínio do problema em um conjunto de componentes de software que seja o mais fiel na sua representação deste domínio. Facilitaria a comunicação do profissional modelador e do usuário da área alvo, na medida em que a correlação da simbologia e conceitos abstratos do mundo real e da ferramenta de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fosse a mais óbvia, natural e exata possível.

A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.

C++, C#, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby e Smalltalk são exemplos de linguagens de programação orientadas a objetos.

ActionScript, ColdFusion, Javascript, PHP (a partir da versão 4.0), Perl (a partir da versão 5) e VB.NET são exemplos de linguagens de programação com suporte a orientação a objetos.

Conceitos essenciais

  • Classe representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos. Exemplo de classe: Os seres humanos.
    • Subclasse é uma nova classe originada de sua classe pai (ver Herança).
  • Objeto / instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria.
  • Atributo são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionário: nome, endereço, telefone, CPF,...; Carro: nome, marca, ano, cor, …; Livro: autor, editora, ano. Por sua vez, os atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de valores dos atributos de um determinado objeto é chamado de estado.
  • Método definem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método deUmLatido. Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas Bidu dê o latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente, coma e morda.
  • Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático).
  • Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero. Há herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um".
  • Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone.
  • Encapsulamento consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).
  • 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.
  • Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):
    • Universal:
      • Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: "List lista = new LinkedList();" (tipo de polimorfismo mais básico que existe).
      • Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java).
    • Ad-Hoc:
      • Sobrecarga: duas funções/métodos com o mesmo nome mas assinaturas diferentes.
      • Coerção: a linguagem que faz as conversões implicitamente (como por exemplo atribuir um int a um float em C++, isto é aceito mesmo sendo tipos diferentes pois a conversão é feita implicitamente).
  • Interface é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface.[1]
  • Pacotes são referências para organização lógica de classes e interfaces.[1]

Referências

Referências bibliográficas

Ver também

Outros projetos Wikimedia também contêm material sobre este tema:
Wikilivros Livros e manuais no Wikilivros

Ligações externas

Ícone de esboço Este sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.

af:Objekgeoriënteerde programmering ar:برمجة كائنية التوجه be:Аб'ектна-арыентаванае праграмаванне be-x-old:Аб'ектна-арыентаванае праграмаваньне bg:Обектно-ориентирано програмиране bn:অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং bs:Objektno orijentisano programiranje ca:Programació orientada a objectes cs:Objektově orientované programování da:Objektorienteret programmering de:Objektorientierte Programmierung el:Αντικειμενοστρεφής προγραμματισμός en:Object-oriented programming eo:Objektema programado es:Programación orientada a objetos et:Objektorienteeritud programmeerimine eu:Objektuei orientatutako programazio fa:برنامه‌نویسی شیء گرا fi:Olio-ohjelmointi fr:Programmation orientée objet gl:Programación orientada a obxectos he:תכנות מונחה עצמים hr:Objektno orijentirano programiranje hu:Objektumorientált programozás id:Pemrograman berorientasi objek io:Objektema programado is:Hlutbundin forritun it:Programmazione orientata agli oggetti ja:オブジェクト指向 ka:ობიექტურად ორიენტირებული პროგრამირება ko:객체 지향 프로그래밍 lt:Objektinis programavimas lv:Objektorientētā programmēšana mk:Објектно-ориентирано програмирање ms:Pengaturcaraan berorientasi objek nl:Objectgeoriënteerd no:Objektorientert programmering pl:Programowanie obiektowe ro:Programare orientată pe obiecte ru:Объектно-ориентированное программирование scn:Prugrammazzioni urientata all'uggetta sh:Objektno orijentisano programiranje simple:Object-oriented programming sk:Objektové programovanie sq:Programimi i orientuar në objekte sr:Објектно-оријентисано програмирање sv:Objektorienterad programmering ta:பொருள் நோக்கு நிரலாக்கம் th:การเขียนโปรแกรมเชิงวัตถุ tr:Nesne Yönelimli Programlama uk:Об'єктно-орієнтоване програмування ur:برمجہ شئے التوجہ vi:Lập trình hướng đối tượng wuu:面向对象程式编制 zh:面向对象程序设计

talvez você goste