Perguntas com a marcação «inheritance»

A herança é uma maneira de reutilizar o código de objetos existentes ou estabelecer um subtipo de um objeto existente, ou ambos, dependendo do suporte à linguagem de programação.

5
Como a definição de que um método pode ser substituído é um compromisso mais forte do que a definição de que um método pode ser chamado?
De: http://www.artima.com/lejava/articles/designprinciples4.html Erich Gamma: Eu ainda acho que é verdade mesmo depois de dez anos. A herança é uma maneira legal de mudar o comportamento. Mas sabemos que é frágil, porque a subclasse pode facilmente fazer suposições sobre o contexto em que um método que substitui está sendo chamado. Existe …




5
Os mixins Python são um anti-padrão?
Estou plenamente ciente de que pylintoutras ferramentas de análise estática não são oniscientes e, às vezes, seus conselhos devem ser desobedecidos. (Isso se aplica a várias classes de mensagens, não apenas a conventions.) Se eu tiver aulas como class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, …

7
Por que os construtores não são herdados?
Estou confuso sobre quais poderiam ser os problemas se um construtor fosse herdado de uma classe base. O Cpp Primer Plus diz: Os construtores são diferentes de outros métodos de classe, pois criam novos objetos, enquanto outros são invocados por objetos existentes . Esse é um dos motivos pelos quais …
33 c++  inheritance 

10
Tudo bem ter objetos que se projetam, mesmo que polua a API de suas subclasses?
Eu tenho uma classe base Base,. Tem duas subclasses Sub1e Sub2. Cada subclasse possui alguns métodos adicionais. Por exemplo, Sub1tem Sandwich makeASandwich(Ingredients... ingredients)e Sub2temboolean contactAliens(Frequency onFrequency) . Como esses métodos usam parâmetros diferentes e fazem coisas totalmente diferentes, eles são completamente incompatíveis, e não posso simplesmente usar o polimorfismo para …

10
“Pai x = new Child ();” em vez de “Child x = new Child ();” é uma prática ruim se pudermos usar o último?
Por exemplo, eu tinha visto alguns códigos que criam um fragmento como este: Fragment myFragment=new MyFragment(); que declara uma variável como fragmento em vez de MyFragment, que MyFragment é uma classe filho de fragmento. Não estou satisfeito com esta linha de códigos porque acho que esse código deve ser: MyFragment …


7
Devo testar métodos herdados?
Suponha que eu tenha um gerente de classe derivado de uma classe base Employee e que Employee tenha um método getEmail () herdado pelo Manager . Devo testar se o comportamento do método getEmail () de um gerente é de fato o mesmo que o de um funcionário? No momento …



3
Existem idiomas OO sem herança?
Durante uma revisão de código hoje, um colega meu disse algo interessante: prototypesó é útil quando você precisa de herança - e quando a herança é uma boa ideia ? Pensei sobre isso e percebi que geralmente uso herança para contornar códigos mal projetados em primeiro lugar. O estilo OO …

3
Melhor design para formulários do Windows que compartilham funcionalidades comuns
No passado, eu usava herança para permitir a extensão de formulários do Windows no meu aplicativo. Se todos os meus formulários tivessem controles, arte-final e funcionalidade comuns, eu criaria um formulário básico implementando os controles e a funcionalidade comuns e permitiria que outros controles fossem herdados desse formulário base. No …

3
Como o fortalecimento das pré-condições e o enfraquecimento das pós-condições violam o princípio da substituição de Liskov?
Eu li que o princípio de substituição de Liskov é violado se: As pré-condições são reforçadas, ou Pós-condições são enfraquecidas Mas ainda não entendi completamente como esses dois pontos violariam o princípio da substituição de Liskov. Alguém pode explicar com um exemplo. Especificamente, como qualquer uma das condições acima causaria …

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.