SUPPORT THE WORK

GetWiki

Is-a

ARTICLE SUBJECTS
aesthetics  →
being  →
complexity  →
database  →
enterprise  →
ethics  →
fiction  →
history  →
internet  →
knowledge  →
language  →
licensing  →
linux  →
logic  →
method  →
news  →
perception  →
philosophy  →
policy  →
purpose  →
religion  →
science  →
sociology  →
software  →
truth  →
unix  →
wiki  →
ARTICLE TYPES
essay  →
feed  →
help  →
system  →
wiki  →
ARTICLE ORIGINS
critical  →
discussion  →
forked  →
imported  →
original  →
Is-a
[ temporary import ]
please note:
- the content below is remote from Wikipedia
- it has been imported raw for GetWiki
{{Short description|Subsumption relationship between abstractions}}{{multiple issues|{{essay-like|date=August 2018}}{{technical|date=August 2018}}}}In knowledge representation and ontology components, including for object-oriented programming and design, is-a (also written as is_a or is a) is a (wikt:subsume|subsumptive){{efn|See Liskov substitution principle.}} relationship between abstractions (e.g., types, classes), wherein one class A is a subclass of another class B (and so B is a superclass of A).In other words, type A is a subtype of type B when A's specification implies B's specification. That is, any object (or class) that satisfies A's specification also satisfies B's specification, because B's specification is weaker.WEB, Subtypes and Subclasses,weblink MIT OCW, 2 October 2012, For example, a cat 'is a' animal, but not vice versa. All cats are animals, but not all animals are cats.Behaviour that are is relevant to all animals is defined on an animal class, whereas behaviour that is relevant only for cats is defined in a cat class. By defining the cat class as 'extending' the animal class, all cats 'inherit' the behaviour defined for animals, without the need to explicitly code that behaviour for cats.

Related concepts

The is-a relationship is to be contrasted with the has-a (has_a or has a) relationship between types (classes); confusing the relations has-a and is-a is a common error when designing a model (e.g., a computer program) of the real-world relationship between an object and its subordinate. The is-a relationship may also be contrasted with the instance-of relationship between objects (instances) and types (classes): see Type–token distinction.To summarize the relations, there are:
  • hyperonym–hyponym (supertype/superclass–subtype/subclass) relations between types (classes) defining a taxonomic hierarchy, where
    • for a subsumption relation: a hyponym (subtype, subclass) has a type-of (is-a) relationship with its hyperonym (supertype, superclass);
  • holonym–meronym (whole/entity/container–part/constituent/member) relations between types (classes) defining a possessive hierarchy, where
  • concept–object (type–token) relations between types (classes) and objects (instances), where
    • a token (object) has an instance-of relationship with its type (class).

Examples of subtyping

Subtyping enables a given type to be substituted for another type or abstraction. Subtyping is said to establish an is-a relationship between the subtype and some existing abstraction, either implicitly or explicitly, depending on language support. The relationship can be expressed explicitly via inheritance in languages that support inheritance as a subtyping mechanism.

C++

The following C++ code establishes an explicit inheritance relationship between classes B and A, where B is both a subclass and a subtype of A, and can be used as an A wherever a B is specified (via a reference, a pointer or the object itself).class A{ public:
void DoSomethingALike() const {}
};class B : public A{ public:
void DoSomethingBLike() const {}
};void UseAnA(A const& some_A){
some_A.DoSomethingALike();
}void SomeFunc(){
B b;
UseAnA(b); // b can be substituted for an A.
}BOOK
, Mitchell
, John
, John C. Mitchell
, Concepts in programming language
, 2002
, Cambridge University Press
, Cambridge, UK
, 0-521-78098-5
, 287
, 10 "Concepts in object-oriented languages",

Python

The following python code establishes an explicit inheritance relationship between classes {{var|B}} and {{var|A}}, where {{var|B}} is both a subclass and a subtype of {{var|A}}, and can be used as an {{var|A}} wherever a {{var|B}} is required.class A:
def do_something_a_like(self):
pass
class B(A):
def do_something_b_like(self):
pass
def use_an_a(some_a):
some_a.do_something_a_like()
def some_func():
b = B()
use_an_a(b) # b can be substituted for an A.
The following example, {{var|type(a)}} is a "regular" type, and {{var|type(type(a))}} is a metatype. While as distributed all types have the same metatype ({{var|PyType_Type}}, which is also its own metatype), this is not a requirement. The type of classic classes, known as {{var|types.ClassType}}, can also be considered a distinct metatype.WEB, Guido van Rossum, Subtyping Built-in Types,weblink 2 October 2012,
a = 0 type(a)
type(type(a))
type(type(type(a)))
type(type(type(type(a))))

Java

In Java, is-a relation between the type parameters of one class or interface and the type parameters of another are determined by the extends and implements clauses.Using the {{code|Collections}} classes, {{code|ArrayList}} implements {{code|List}}, and {{code|List}} extends {{code|Collection}}. So {{code|ArrayList}} is a subtype of {{code|List}}, which is a subtype of {{code|Collection}}. The subtyping relationship is preserved between the types automatically. When defining an interface, {{code|PayloadList}}, that associates an optional value of generic type P with each element, its declaration might look like:interface PayloadList extends List {
void setPayload(int index, P val);
...
}The following parameterizations of PayloadList are subtypes of {{code|List}}:PayloadListPayloadListPayloadList

Liskov substitution principle

Liskov substitution principle explains a property, "If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T,".BOOK, Liskov, Barbara, Data Abstraction and Hierarchy, May 1988, SIGPLAN Notices,weblinkweblink Jun 21, 2020, unfit, Following example shows a violation of LSP.Here is perhaps an example of violation of LSP:class Rectangle{
public:
void SetWidth(double w) { itsWidth = w; }
void SetHeight(double h) { itsHeight = h; }
double GetHeight() const { return itsHeight; }
double GetWidth() const { return itsWidth; }
double GetArea() const { return GetHeight() * GetWidth(); }
private:
double itsWidth;
double itsHeight;
};From a programing point of view, the Square class may be implemented by inheriting from the Rectangle class.public class Square : Rectangle{
public:
virtual void SetWidth(double w);
virtual void SetHeight(double h);
};void Square::SetWidth(double w){
Rectangle::SetWidth(w);
Rectangle::SetHeight(w);
}void Square::SetHeight(double h){
Rectangle::SetHeight(h);
Rectangle::SetWidth(h);
}However, this violates LSP even though the is-a relationship holds between Rectangle and SquareConsider the following example, where function g does not work if a Square is passed in, and so the open-closed principle might be considered to have been violated.void g(Rectangle& r){
r.SetWidth(5);
r.SetHeight(4);
assert(r.GetArea()) == 20); // assertion will fail
}Conversely, if one considers that the type of a shape should only be a constraint on the relationship of its dimensions, then it is the assumption in g() that SetHeight will change height, and area, but not width that is invalid, not just for true squares, but even potentially for other rectangles that might be coded so as to preserve area or aspect ratio when height changes.WEB, The Liskov Substitution Principle,weblink Robert C. Martin, 1996, 2 October 2012, dead,weblink" title="web.archive.org/web/20150905081111weblink">weblink 5 September 2015,

See also

Notes

{{notelist}}{{reflist|30em}}

References



- content above as imported from Wikipedia
- "Is-a" does not exist on GetWiki (yet)
- time: 8:39pm EDT - Sat, May 04 2024
[ this remote article is provided by Wikipedia ]
LATEST EDITS [ see all ]
GETWIKI 23 MAY 2022
GETWIKI 09 JUL 2019
Eastern Philosophy
History of Philosophy
GETWIKI 09 MAY 2016
GETWIKI 18 OCT 2015
M.R.M. Parrott
Biographies
GETWIKI 20 AUG 2014
CONNECT