Questions tagged [inheritance]
Inheritance is a way to reuse code of existing objects, or to establish a subtype from an existing object, or both, depending upon programming language support.
64
questions
119
votes
5answers
62k views
Why should I prefer composition over inheritance?
I always read that composition is to be preferred over inheritance. A blog post on unlike kinds, for example, advocates using composition over inheritance, but I can't see how polymorphism is achieved....
151
votes
14answers
43k views
Where does this concept of “favor composition over inheritance” come from?
In the last few months, the mantra "favor composition over inheritance" seems to have sprung up out of nowhere and become almost some sort of meme within the programming community. And every time I ...
70
votes
7answers
78k views
When to use abstract classes instead of interfaces with extension methods in C#?
"Abstract class" and "interface" are similar concepts, with interface being the more abstract of the two. One differentiating factor is that abstract classes provide method implementations for derived ...
8
votes
4answers
2k views
Are trivial protected getters blatant overkill?
Something I really have not thought about before (AS3 syntax):
private var m_obj:Object;
protected function get obj():Object
{
return m_obj;
}
private var m_str:String;
protected function get ...
113
votes
12answers
25k views
Why would Square inheriting from Rectangle be problematic if we override the SetWidth and SetHeight methods?
If a Square is a type of Rectangle, than why can't a Square inherit from a Rectangle? Or why is it a bad design?
I have heard people say:
If you made Square derive from Rectangle, then a Square ...
55
votes
9answers
19k views
Code Smell: Inheritance Abuse [duplicate]
It's been generally accepted in the OO community that one should "favor composition over inheritance". On the other hand, inheritance does provide both polymorphism and a straightforward, terse way of ...
19
votes
3answers
8k views
How does strengthening of preconditions and weakening of postconditions violate Liskov substitution principle?
I read that Liskov's substitution principle is violated if :
Preconditions are strengthened, or
Postconditions are weakened
But I don't get fully yet how these two points would violate Liskov ...
18
votes
3answers
2k views
Is there a specific name for the “Square inherits from Rectangle” paradox?
A certain failure of OOP is shown with a class Square inheriting from Rectangle, where logically Square is a specialization of Rectangle and should therefore inherit from it, but everything falls ...
33
votes
10answers
8k views
Is it okay to have objects that cast themselves, even if it pollutes the API of their subclasses?
I have a base class, Base. It has two subclasses, Sub1 and Sub2. Each subclass has some additional methods. For example, Sub1 has Sandwich makeASandwich(Ingredients... ingredients), and Sub2 has ...
14
votes
1answer
2k views
How to verify the Liskov substitution principle in an inheritance hierarchy?
Inspired by this answer:
Liskov Substitution Principle
requires
that
Preconditions cannot be strengthened in a subtype.
Postconditions cannot be weakened in a subtype.
Invariants of ...
12
votes
9answers
3k views
How can designing for inheritance cause extra cost? [closed]
So I wanted to inherit from a sealed class in csharp and got burned. There is just no way to unseal it unless you have access to the source.
Then it got me thinking "why sealed even exists?". 4 ...
27
votes
2answers
39k views
Why is inheritance generally viewed as a bad thing by OOP proponents [duplicate]
I keep hearing the phrase "Favour Composition over Inheritance" from GoF which is being annoyingly mentioned repeatedly by my friend who thinks it is a valid blanket statement but is it not more ...
19
votes
4answers
6k views
Inheritance vs mixins in dynamic languages?
When should you prefer inheritance patterns over mixins in dynamic languages?
By mixins, I mean actual proper mixing in, as in inserting functions and data members into an object in runtime.
When ...
5
votes
2answers
4k views
Alternative to “inheritance versus composition?” [duplicate]
Possible Duplicate:
Where does this concept of “favor composition over inheritance” come from?
I have colleagues at work who claim that "Inheritance is an anti-pattern" and want to use ...
10
votes
5answers
10k views
Interface and Inheritance: Best of both worlds?
I 'discovered' interfaces and I started to love them. The beauty of an interface is that it is a contract, and any object that fulfills that contract can be used wherever that interface is required.
...
7
votes
4answers
460 views
Is inheritance that adds rules bad? [duplicate]
I got into a debate on this question which distilled to if it is a good idea for a specialization of a class to add business rules. Unfortunately this point got trampled in the comments so I'm asking ...
3
votes
5answers
2k views
Explanation of the definition of interface inheritance as described in GoF book
I am reading the first chapter of the Gof book. Section 1.6 discusses about class vs interface inheritance:
Class versus Interface Inheritance
It's important to understand the difference between ...
4
votes
3answers
288 views
Which one subsumes the other: class-based object-orientation or prototypal inheritance?
In this talk: http://www.youtube.com/watch?v=hQVTIJBZook, Douglas Crockford claims that class-based object-orientation can be represented in terms of prototypal inheritance. The construction he gives ...
51
votes
8answers
21k views
LSP vs OCP / Liskov Substitution VS Open Close
I am trying to understand the SOLID principles of OOP and I've come to the conclusion that LSP and OCP have some similarities (if not to say more).
the open/closed principle states "software ...
136
votes
9answers
30k views
Is there any “real” reason multiple inheritance is hated?
I've always liked the idea of having multiple inheritance supported in a language. Most often though it's intentionally forgone, and the supposed "replacement" is interfaces. Interfaces simply do ...
37
votes
3answers
10k views
Is “composition over inheritance” violating “dry principle”?
For example, consider I have a class for other classes to extend:
public class LoginPage {
public String userId;
public String session;
public boolean checkSessionValid() {
}
}
and ...
24
votes
3answers
5k views
Are there any OO languages without inheritance?
During a code review today, a colleague of mine said something interesting:
prototype is only useful when you need inheritance - and when's inheritance ever a good idea?
I thought about this and I ...
3
votes
4answers
8k views
Why 'List<E>' is an 'interface' but not 'abstract class'?
Amidst defining the hierarchy, firstly, one can think to embed the abstract method(behavior) in abstract class only because the derive concrete class possess that behavior as core behavior with it's ...
4
votes
1answer
824 views
Composition vs. Inheritance [duplicate]
Here's what is given:
public interface Request {}
// there are 20 subclasses of Request
public class CreateUserRequest implements Request {
@NotEmpty
public String userName;
}
// request ...
1
vote
2answers
347 views
Expressing interface inheritance in natural language [duplicate]
In object-oriented programming, when you extend a class you establish an is-a relationship between a new subtype and its parent(s), i.e. B is an A (aka code inheritance). When you compose a class with ...
62
votes
11answers
57k views
Why is it good to split a program into multiple classes? [closed]
I'm still a student in high school (entering 10th grade), and I have yet to take an actual computer course in school. Everything I've done so far is through books. Those books have taught me concepts ...
55
votes
17answers
12k views
Is OO-programming really as important as hiring companies place it? [closed]
I am just finishing my masters degree (in computing) and applying for jobs. I've noticed many companies specifically ask for an understanding of object orientation. Popular interview questions are ...
61
votes
1answer
11k views
How are mixins or traits better than plain multiple inheritance?
C++ has plain multiple inheritance, many language designs forbid it as dangerous. But some languages like Ruby and PHP use strange syntax to do the same thing and call it mixins or traits. I heard ...
36
votes
9answers
40k views
Is it good practice to inherit from generic types?
Is it better to use List<string> in type annotations or StringList where StringList
class StringList : List<String> { /* no further code!*/ }
I ran into several of these in Irony.
20
votes
3answers
40k views
Best design for Windows forms that will share common functionality
In the past, I have used inheritance to allow the extension of Windows forms in my application. If all of my forms would have common controls, artwork, and functionality, I would create a base form ...
37
votes
11answers
11k views
Are abstract classes / methods obsolete?
I used to create a lot of abstract classes / methods. Then I started using interfaces.
Now I am not sure if interfaces aren't making abstract classes obsolete.
You need a fully abstract class? ...
11
votes
6answers
10k views
Why is subclassing too much bad (and hence why should we use prototypes to do away with it)?
I was reading up on design patterns, and I read that the prototype design pattern does away with excessive subclassing.
Why is subclassing bad? What advantage would using a prototype bring about over ...
9
votes
5answers
1k views
How do we know to favour composition over generalisation is always the right choice?
Whether an object physically exists or not, we can choose to model it in different ways. We could arbitarily use generalisation or composition in many cases. However, the GoF principle of "favour ...
13
votes
3answers
5k views
Composition over inheritance but
I'm trying to teach myself software engineering and coming up against some conflicting information which is confusing me.
I've been learning OOP and what abstract classes / Interfaces are and how to ...
3
votes
2answers
583 views
Correct way to extend a hierarchy tree
I have the following tree currently to be implemented in Java.
My problems are the following:
How can I go about addressing the fact Admin needs to have all tier 4
logic from both branches of the ...
6
votes
7answers
4k views
Inheritance using non-abstract base class
This post is based on the question https://stackoverflow.com/questions/49002/prefer-composition-over-inheritance/11758048#comment15634305_11758048.
Some people said - check whether there is “is-a” ...
4
votes
2answers
392 views
Why is it bad to have one mechanism for inheritance and subtyping?
It is quite well-known that (class) inheritance and subtyping (sometimes called interface inheritance) are different things: inheritance is a mechanism for sharing code, while subtyping is a ...
15
votes
6answers
4k views
Real-world scenarios for protected methods
Today I noticed that I basically never use protected methods in C++ code, because I rarely feel the need to call non-public methods of a parent. I do use protected in Java in the template method ...
7
votes
4answers
1k views
Can I make my constructors less repetitive?
I'm extending a class with 10 different constructors. The new subclass, SpecialImage, is used like this:
SpecialImage specialImage = new SpecialImage(..);
// Leverage the Rotate() method of ...
4
votes
2answers
142 views
How should one modularly implement related objects?
I tried to make the question title as generally applicable as possible, but I'm not certain I worded it so well. It was brought about by a very specific problem I'm having, and for the remainder of ...
3
votes
1answer
795 views
What is the best way to use inheritance with ORMs?
If I have a People table and those people can be at different addresses, and each address can have more than one person, thats a many-to-many relationship.
So, using ORMs like Entity Framework and ...
3
votes
2answers
3k views
Is coupling a good thing or bad thing when I'm developing standalone modules in a framework?
Encapsulation is a mechanism of wrapping the data (variables) and code acting on the data (methods) together as a single unit. Client code is expected to inherit from system-supplied classes and then ...
3
votes
2answers
315 views
Database Design for Inheritance
In my project I have an object Player (attr example: pl_id, pl_data1) that is one of these types:
Its GoalKeeper (attr example: gk_data1)
OR Defender (attr example: df_data1)
OR Forward (attr ...
1
vote
5answers
848 views
How to avoid object cast after passing a parameter?
I have a problem with implementing generic user interface interaction.
I have different classes that contain data each for particular interface element. So every UserInterfaceElementComponent has ...
8
votes
2answers
917 views
Who decided on the terminology downcasting and upcasting?
As far as I know, the terminology comes from how the inheritance hierarchy is traditionally displayed, with the extending types at the bottom, and the parent types at the top.
This is a bit pointless,...
7
votes
5answers
867 views
Java without implementation inheritance
In a recent video on Java, Joshua Bloch states at 4 minutes 20 seconds into the video:
And then there's inheritance, and that was a marketing necessity. You know, we can argue whether you really ...
7
votes
3answers
206 views
Is a subclass Liskov Substitutable if it disallows the same invocation of the constructor in the child as in the parent?
Say, I have two classes:
class FTPClient:
def __init__(self, host, port):
self._client = FTPDriver(host, port)
...
class FTPSClient(FTPClient):
def __init__(self, host, port, ...
6
votes
3answers
954 views
How to refactor my design, if it seems to require multiple inheritance?
Recently I made a question about Java classes implementing methods from two sources (kinda like multiple inheritance). However, it was pointed out that this sort of need may be a sign of a design flaw....
5
votes
2answers
532 views
Do common MVC frameworks violate the LSP and is there a MVC framework which does not?
You who have worked with a framework implementing the MVC architectural pattern most likely know how these frameworks are usually implemented.
They contain a base Controller class, which you extend, ...
4
votes
6answers
739 views
What is the correct OOP relation between complex and real numbers?
On one hand
class complex {
double real;
double imaginary;
}
it is composition
on the other hand
class complex : double {
double imaginary;
}
it is inheritance
Which one is correct? ...