Programação baseada em classes

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

A programação baseada em classes , ou mais comumente orientação de classes , é um estilo de programação orientada a objetos (OOP) em que a herança ocorre por meio da definição de classes de objetos , em vez de herança ocorrendo apenas por meio dos objetos (compare a programação baseada em protótipo ).

O modelo de POO mais popular e desenvolvido é um modelo baseado em classes, em vez de um modelo baseado em objetos. Nesse modelo, objetos são entidades que combinam estado (ou seja, dados), comportamento (ou seja, procedimentos ou métodos ) e identidade (existência única entre todos os outros objetos). A estrutura e o comportamento de um objeto são definidos por uma classe , que é uma definição , ou blueprint , de todos os objetos de um tipo específico. Um objeto deve ser criado explicitamente com base em uma classe e um objeto assim criado é considerado uma instância dessa classe. Um objeto é semelhante a uma estrutura, com a adição de ponteiros de método, controle de acesso de membro e um membro de dados implícito que localiza instâncias da classe (ou seja, objetos da classe) na hierarquia de classes (essencial para recursos de herança em tempo de execução).

Encapsulamento

O encapsulamento evita que os usuários quebrem as invariantes da classe, o que é útil porque permite que a implementação de uma classe de objetos seja alterada para aspectos não expostos na interface sem impacto no código do usuário. As definições de encapsulamento focam no agrupamento e empacotamento de informações relacionadas ( coesão ) em vez de questões de segurança.

Herança

Na programação baseada em classes, a herança é feita definindo novas classes como extensões de classes existentes: a classe existente é a classe pai e a nova classe é a classe filha . Se uma classe filha tiver apenas uma classe pai, isso é conhecido como herança única , enquanto se uma classe filha puder ter mais de uma classe pai, isso é conhecido como herança múltipla . Isso organiza as classes em uma hierarquia , seja uma árvore (se herança única) ou treliça (se herança múltipla).

A característica definidora da herança é que tanto a interface quanto a implementação são herdadas; se apenas a interface for herdada, isso é conhecido como herança de interface ou subtipagem. A herança também pode ser feita sem classes, como na programação baseada em protótipos .

Crítica dos modelos baseados em classes

Linguagens baseadas em classes, ou, para ser mais preciso, linguagens tipadas , onde a subclasse é a única forma de subtipagem , têm sido criticadas por misturar implementações e interfaces – o princípio essencial na programação orientada a objetos. Os críticos dizem que pode-se criar uma classe bag que armazena uma coleção de objetos, então estendê-la para fazer uma nova classe chamada classe set onde a duplicação de objetos é eliminada. [1] [2] Agora, uma função que recebe um objeto da classe bag pode esperar que adicionar dois objetos aumente o tamanho de uma sacola em dois, mas se alguém passar um objeto de uma classe set, então adicionar dois objetos pode ou não aumentar o tamanho de um saco por dois. O problema surge precisamente porque a subclassificação implica a subtipagem mesmo nos casos em que o princípio da subtipagem, conhecido como princípio da substituição de Liskov , não é válido. Barbara Liskov e Jeannette Wing formularam o princípio sucintamente em um artigo de 1994 da seguinte forma:

Requisito do Subtipo : Letser uma propriedade demonstrável sobre objetosdo tipo. Entãodeve ser verdadeiro para objetosdo tipoOndeé um subtipo de.

Assim, normalmente deve-se distinguir subtipagem e subclasse. A maioria das linguagens orientadas a objetos atuais distinguem subtipagem e subclasses, porém algumas abordagens de projeto não o fazem.

Além disso, outro exemplo comum é que um objeto pessoa criado a partir de uma classe filha não pode se tornar um objeto da classe pai porque uma classe filha e uma classe pai herdam uma classe pessoa, mas linguagens baseadas em classe geralmente não permitem alterar o tipo de classe de o objeto em tempo de execução. Para linguagens baseadas em classe, essa restrição é essencial para preservar a visão unificada da classe para seus usuários. Os usuários não precisam se preocupar se uma das implementações de um método causa mudanças que quebram as invariantesda classe. Tais mudanças podem ser feitas destruindo o objeto e construindo outro em seu lugar. O polimorfismo pode ser usado para preservar as interfaces relevantes mesmo quando tais alterações são feitas, porque os objetos são vistos como abstrações de caixa preta e acessados ​​por meio da identidade do objeto . No entanto, geralmente o valor das referências de objetos referentes ao objeto é alterado, o que causa efeitos no código do cliente.

Idiomas de exemplo

Embora o Simula tenha introduzido a abstração de classe, o exemplo canônico de uma linguagem baseada em classe é Smalltalk . Outros incluem PHP , C++ , Java , C# e Objective-C .

Veja também

Referências

  1. ^ Kiselyov, Oleg. "Subtipagem, subclassificação e problemas com OOP" . Recuperado em 7 de outubro de 2012 .
  2. ^ Ducasse, Stéphane. "Um conjunto não pode ser um subtipo de uma bolsa" . Recuperado em 7 de outubro de 2012 .