Kaydet (Commit) 71e3c28e authored tarafından Osman Kanadikirik's avatar Osman Kanadikirik

Liskov Substitution Priciple çevirildi

üst 0dab8825
...@@ -1322,118 +1322,111 @@ class HttpRequester { ...@@ -1322,118 +1322,111 @@ class HttpRequester {
``` ```
**[⬆ en başa dön](#içindekiler)** **[⬆ en başa dön](#içindekiler)**
### Liskov Substitution Principle (LSP) ### Liskov Yer Değiştirme Prensibi (LSP)
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
class Rectangle { class Dikdortgen {
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() {
return this.width * this.height; return this.genislik * this.yukseklik;
} }
} }
class Square extends Rectangle { class Kare extends Dikdortgen {
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;
} }
} }
function renderLargeRectangles(rectangles) { function genisDikdortgenlerOlustur(dikdortgenler) {
rectangles.forEach((rectangle) => { dikdortgenler.forEach((dikdortgen) => {
rectangle.setWidth(4); dikdortgen.genisligiBelirle(4);
rectangle.setHeight(5); dikdortgen.yuksekligiBelirle(5);
const area = rectangle.getArea(); // BAD: Returns 25 for Square. Should be 20. const alan = dikdortgen.alanHesapla(); // KÖTÜ: Kare için 25 döner. 20 olmalıydı.
rectangle.render(area); dikdortgen.olustur(alan);
}); });
} }
const rectangles = [new Rectangle(), new Rectangle(), new Square()]; const dikdortgenler = [new Dikdortgen(), new Dikdortgen(), new Kare()];
renderLargeRectangles(rectangles); genisDikdortgenlerOlustur(dikdortgenler);
``` ```
**İyi:** **İyi:**
```javascript ```javascript
class Shape { class Sekil {
setColor(color) { renginiAyarla(renk) {
// ... // ...
} }
render(area) { olustur(alan) {
// ... // ...
} }
} }
class Rectangle extends Shape { class Dikdortgen extends Sekil {
constructor(width, height) { constructor(genislik, yukseklik) {
super(); super();
this.width = width; this.genislik = genislik;
this.height = height; this.yukseklik = yukseklik;
} }
getArea() { alanHesapla() {
return this.width * this.height; return this.genislik * this.yukseklik;
} }
} }
class Square extends Shape { class Kare extends Sekil {
constructor(length) { constructor(uzunluk) {
super(); super();
this.length = length; this.uzunluk = uzunluk;
} }
getArea() { alanHesapla() {
return this.length * this.length; return this.uzunluk * this.uzunluk;
} }
} }
function renderLargeShapes(shapes) { function genisSekillerOlustur(sekiller) {
shapes.forEach((shape) => { sekiller.forEach((sekil) => {
const area = shape.getArea(); const alan = sekil.alanHesapla();
shape.render(area); sekil.olustur(alan);
}); });
} }
const shapes = [new Rectangle(4, 5), new Rectangle(4, 5), new Square(5)]; const sekiller = [new Dikdortgen(4, 5), new Dikdortgen(4, 5), new Kare(5)];
renderLargeShapes(shapes); genisSekillerOlustur(sekiller);
``` ```
**[⬆ en başa dön](#içindekiler)** **[⬆ en başa dön](#içindekiler)**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment