This is a scary term for a very simple concept. It's formally defined as "If S
Bu terim bu kadar basit bir konsept için korkutucu. Resmi olarak tanımı şöyle: "Eğer S, T'nin alt türü ise, programın istenilen özelliklerinden herhangi birini değiştirmeden(doğruluğunu, yaptığı işi vb.)
is a subtype of T, then objects of type T may be replaced with objects of type S
T tipindeki nesneler S tipindeki nesneler ile yer değiştirebilir (yani, S tipindeki nesneler T tipindeki nesnelerin yerine geçebilir). Bu daha da korkutucu bir tanım.
(i.e., objects of type S may substitute objects of type T) without altering any
of the desirable properties of that program (correctness, task performed,
Bunun için en iyi açıklama: eğer bir ebeveyn sınıfınız ve alt sınıfınız varsa, temel sınıf ve alt sınıf, yanlış sonuçlar ortaya koymadan birbirlerinin yerine kullanılabilir. Hala kafa karıştırıcı olabilir,
etc.)." That's an even scarier definition.
o zaman hadi klasik Kare-Dikdörtgen örneğine göz atalım. Matematiksel olarak kare bir dikdörtgendir ama eğer bunu kalıtım yoluyla, "is-a" ilişkisi kullanarak modellerseniz başınızın belaya girmesi çok gecikmeyecektir.
The best explanation for this is if you have a parent class and a child class,
then the base class and child class can be used interchangeably without getting
incorrect results. This might still be confusing, so let's take a look at the
classic Square-Rectangle example. Mathematically, a square is a rectangle, but
if you model it using the "is-a" relationship via inheritance, you quickly
get into trouble.
**Kötü:**
**Kötü:**
```javascript
```javascript
classRectangle{
classDikdortgen{
constructor(){
constructor(){
this.width=0;
this.genislik=0;
this.height=0;
this.yukseklik=0;
}
}
setColor(color){
renginiBelirle(renk){
// ...
// ...
}
}
render(area){
olustur(alan){
// ...
// ...
}
}
setWidth(width){
genisligiBelirle(genislik){
this.width=width;
this.genislik=genislik;
}
}
setHeight(height){
yuksekligiBelirle(yukseklik){
this.height=height;
this.yukseklik=yukseklik;
}
}
getArea(){
alanHesapla(){
returnthis.width*this.height;
returnthis.genislik*this.yukseklik;
}
}
}
}
classSquareextendsRectangle{
classKareextendsDikdortgen{
setWidth(width){
genisligiBelirle(genislik){
this.width=width;
this.genislik=genislik;
this.height=width;
this.yukseklik=genislik;
}
}
setHeight(height){
yuksekligiBelirle(yukseklik){
this.width=height;
this.genislik=yukseklik;
this.height=height;
this.yukseklik=yukseklik;
}
}
}
}
functionrenderLargeRectangles(rectangles){
functiongenisDikdortgenlerOlustur(dikdortgenler){
rectangles.forEach((rectangle)=>{
dikdortgenler.forEach((dikdortgen)=>{
rectangle.setWidth(4);
dikdortgen.genisligiBelirle(4);
rectangle.setHeight(5);
dikdortgen.yuksekligiBelirle(5);
constarea=rectangle.getArea();// BAD: Returns 25 for Square. Should be 20.
constalan=dikdortgen.alanHesapla();// KÖTÜ: Kare için 25 döner. 20 olmalıydı.