A Orientação a Objetos requer o conceito de herança? [fechadas]

4

Eu leio Análise e Design Orientados a Objetos com Notas de Aplicações escritas por Grady Booch. No livro há uma frase:

There are three important parts to this definition: (1) Object-oriented programming uses objects, not algorithms, as its fundamental logical building blocks (the “part of” hierarchy we introduced in Chapter 1); (2) each object is an instance of some class; and (3) classes may be related to one another via inheritance relationships (the “is a” hierarchy we spoke of in Chapter 1). A program may appear to be object-oriented, but if any of these elements is missing, it is not an object-oriented program. Specifically, programming without inheritance is distinctly not objectoriented; that would merely be programming with abstract data types.

Eu quero saber se isso é certo? Se não temos herança 'nosso programa não é orientado a objetos?

    
por Shahrooz Jafari 20.01.2015 / 20:03
fonte

4 respostas

10

If we don't have inheritance our program is not object oriented?

Umm, não.

Espero que a maioria dos programadores ainda considere um programa com objetos tradicionais (pacotes de estados e funções relacionados) como orientado a objeto, mesmo se não houver herança. Nos últimos anos, tornou-se amplamente aceito que a herança de objetos concretos é algo a ser usado com cautela se não for evitado de imediato.

Independentemente disso, você está perguntando sobre terminologia. Não há regras para o que é Orientado a Objetos . É um nome usado frouxamente para ajudar a comunicar conceitos; conceitos que são cada vez menos úteis para ajudar os programadores a resolver problemas.

    
por 20.01.2015 / 20:11
fonte
6

Alan Kay, que cunhou a frase programação orientada a objetos, observou aqui e em outros lugares, essa abordagem orientada a objetos programação é mais sobre mensagens do que objetos. A chave é que os programas são projetados como um conjunto de objetos que se comunicam por meio de mensagens (em muitos idiomas, uma mensagem é chamada de chamada de método polimórfica).

Em Smalltalk (a linguagem em que Alan Kay estava trabalhando) quando uma mensagem é enviada para um objeto, o receptor do objeto determina como o objeto responderá. Em uma linguagem baseada em classe, o comportamento típico é:

  1. Verifique se o objeto tem um método que corresponda à assinatura da mensagem, se assim for, invoque isso.
  2. Caso contrário, marque (recursivamente) se alguma das classes base do objeto contiver um método que corresponda à assinatura do método. Quando uma classe herda outra classe, isso significa que os métodos da classe base estão disponíveis para os objetos da classe derivada, mas podem ser substituídos para fornecer um comportamento diferente.

No entanto, outras linguagens, como Self e JavaScript, não são objetos de classes. No lugar da herança, um padrão conhecido como delegação é usado. Quando um objeto recebe uma mensagem que não entende, ele pode delegar sua resposta a outro objeto conhecido como protótipo.

Em todos os idiomas mencionados até agora, diferentemente da maioria das linguagens principais, como Java, C ++ e C #, qualquer objeto pode implementar uma mensagem para qualquer mensagem. C ++ derivou um modelo diferente (e mais restritivo) de Simula, onde uma mensagem é definida em uma classe base e pode ser substituída por uma classe derivada, mas nenhuma outra classe pode responder ao método.

Auto-demonstrou, incluindo em imagens de um subsistema Smalltalk, que usando o modelo baseado em protótipos um modelo baseado em classe pode ser implementado como um padrão de programação, então nesse sentido o modelo baseado em protótipos é mais descritivo. O inverso exigiria a implementação de um novo sistema de objetos do zero (por exemplo, uma classe chamada PrototypicalObject, com comportamento totalmente distinto dos objetos normais do Smalltalk).

Em seu núcleo, OOP é sobre objetos e mensagens (chamadas de método), onde vários objetos podem implementar respostas diferentes para a mesma mensagem. Os detalhes de herança e delegação podem ajudar a criar esses objetos, mas são simplesmente variantes do modelo padrão.

    
por 20.01.2015 / 22:05
fonte
2

A maioria dos princípios OO depende de herança, abstração e interfaces. Portanto, a implementação de herança e interface desempenha um papel importante no design de software orientado a objetos.

Você pode querer ler sobre o SOLID e outros princípios de projeto orientados a objetos.

É claro que é possível escrever programas em linguagens orientadas a objetos sem usar herança (e mais especificamente interfaces e especializações dessas interfaces), mas você acabará com um código mais strongmente acoplado.

    
por 20.01.2015 / 20:17
fonte
1

Herança é outra forma de contenção, mesmo se a herança for a implementação da interface. Sem alavancar a herança, você perde muito da força da programação orientada a objetos.

Herança permite substituir implementações de uma classe sem afetar o cliente da classe. Pense em uma estrutura de interface do usuário (como MFC ou WPF). Muito do framework depende do fato de que um Button, TextBox, Label e Combobox são todas subclasses da mesma classe base Control. Se não houvesse essa interface ou classe base comum, haveria uma enorme proliferação de código para fazer a mesma coisa para as instâncias específicas dessas classes.

Nesse caso, você pode estar usando o C básico.

    
por 20.01.2015 / 20:20
fonte