Unverified Kaydet (Commit) 0dab8825 authored tarafından ook0's avatar ook0 Kaydeden (comit) GitHub

Merge pull request #13 from ook0/master

Prefer composition over inheritance çevirildi
...@@ -1117,41 +1117,38 @@ const araba = new Araba('Ford','F-150','kirmizi') ...@@ -1117,41 +1117,38 @@ const araba = new Araba('Ford','F-150','kirmizi')
``` ```
**[⬆ en başa dön](#içindekiler)** **[⬆ en başa dön](#içindekiler)**
### Prefer composition over inheritance ### Miras(Kalıtım) yerine Kompozisyonu tercih edin
As stated famously in [*Design Patterns*](https://en.wikipedia.org/wiki/Design_Patterns) by the Gang of Four, Gang of Four tarafından [*Design Patterns*](https://en.wikipedia.org/wiki/Design_Patterns) da ünlü olarak belirtildiği gibi, yapabildiğiniz yerlerde miras(kalıtım) yerine kompozisyonu tercih etmelisiniz. Miras(kalıtım)ı
you should prefer composition over inheritance where you can. There are lots of kullanmak için birçok iyi sebep olduğu gibi kompozisyonu kullanmak içinde birçok iyi sebep var. Bu kural için
good reasons to use inheritance and lots of good reasons to use composition. asıl nokta, eğer aklınız içgüdüsel olarak miras(kalıtım)ı tercih ediyorsa, kompozisyonun, probleminizi daha iyi
The main point for this maxim is that if your mind instinctively goes for modelleyebileceğini düşünmeye çalışın. Bazı durumlarda bu olabilir.
inheritance, try to think if composition could model your problem better. In some
cases it can. "Miras(kalıtım)ı ne zaman kullanmalıyım?" diye merak ediyor olabilirsiniz. Bu durum elinizdeki soruna bağlı ama
bu, ne zaman miras(kalıtım)ın kompozisyondan daha anlamlı olduğunun kabul edilebilir bir listesi.
You might be wondering then, "when should I use inheritance?" It
depends on your problem at hand, but this is a decent list of when inheritance 1. Miras(kalıtım)ınız, "-dır, -dir" ilişkisini sağlıyor ve "sahiplik" ilişkisinin sağlamıyor.
makes more sense than composition: (İnsan->Hayvan vs. Kullanıcı->KullanıcıDetayları)
2. Kodu temel sınıflardan yeniden kullanabilirsiniz. (İnsanlar, tüm hayvanlar gibi hareket edebilir)
1. Your inheritance represents an "is-a" relationship and not a "has-a" 3. Bir temel sınıfı değiştirerek türetilmiş sınıflarda genel değişiklikler yapmak istiyorsunuz.
relationship (Human->Animal vs. User->UserDetails). (Hayvanların hareket ettiğinde harcadığı kaloriyi değiştirmek)
2. You can reuse code from the base classes (Humans can move like all animals).
3. You want to make global changes to derived classes by changing a base class.
(Change the caloric expenditure of all animals when they move).
**Kötü:** **Kötü:**
```javascript ```javascript
class Employee { class Personel {
constructor(name, email) { constructor(isim, mail) {
this.name = name; this.isim = isim;
this.email = email; this.mail = mail;
} }
// ... // ...
} }
// Bad because Employees "have" tax data. EmployeeTaxData is not a type of Employee // Kötü çünkü Personeller vergi verisine "sahip". PersonelVergiVerileri, bir Personel türü değil.
class EmployeeTaxData extends Employee { class PersonelVergiVerileri extends Personel {
constructor(ssn, salary) { constructor(ssn, maas) {
super(); super();
this.ssn = ssn; this.ssn = ssn; // sosyal güvenlik numarası
this.salary = salary; this.maas = maas;
} }
// ... // ...
...@@ -1160,23 +1157,23 @@ class EmployeeTaxData extends Employee { ...@@ -1160,23 +1157,23 @@ class EmployeeTaxData extends Employee {
**İyi:** **İyi:**
```javascript ```javascript
class EmployeeTaxData { class PersonelVergiVerileri {
constructor(ssn, salary) { constructor(ssn, maas) {
this.ssn = ssn; this.ssn = ssn; // sosyal güvenlik numarası
this.salary = salary; this.maas = maas;
} }
// ... // ...
} }
class Employee { class Personel {
constructor(name, email) { constructor(isim, mail) {
this.name = name; this.isim = isim;
this.email = email; this.mail = mail;
} }
setTaxData(ssn, salary) { vergiVerisiniBelirle(ssn, maas) {
this.taxData = new EmployeeTaxData(ssn, salary); this.vergiVerisi = new PersonelVergiVerileri(ssn, maas);
} }
// ... // ...
} }
......
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