CodeGym /Java Blogu /Rastgele /Sınıflar arasındaki ilişkiler. Kalıtım, kompozisyon ve to...
John Squirrels
Seviye
San Francisco

Sınıflar arasındaki ilişkiler. Kalıtım, kompozisyon ve toplama

grupta yayınlandı
MERHABA! Bugün Nesne Yönelimli Programlamanın (OOP) bir prensibine daha yakından bakacağız: Kalıtım. Ayrıca sınıflar arasındaki diğer ilişki türlerini de inceleyeceğiz: kompozisyon ve toplama. Sınıflar arasındaki ilişkiler.  Kalıtım, kompozisyon ve toplama - 1Bu konu zor olmayacak: geçmiş derslerde kalıtım ve kalıtım örnekleriyle birçok kez karşılaştınız. Bugün asıl mesele bilginizi pekiştirmek, kalıtım mekanizmasını daha detaylı incelemek ve bir kez daha bazı örnekler üzerinden geçmek olacak. :) İyi hadi gidelim!

Java'da kalıtım ve avantajları

Mutlaka hatırladığınız gibi kalıtım , mevcut bir sınıfa (ana sınıf) dayalı olarak yeni bir sınıfı tanımlamanıza izin veren bir mekanizmadır. Bunu yaparken, yeni sınıf, üst sınıfın özelliklerini ve işlevlerini ödünç alır. Önceki derslerde verilen bir kalıtım örneğini hatırlayalım:

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Çeşitli araba türleriyle çalışmayı içeren belirli bir programımız var. Bir araba tutkunu olmasanız bile, muhtemelen dünyada pek çok araba türü olduğunu biliyorsunuzdur. :) Buna göre arabaların ortak özelliklerini Car. Peki, türü ne olursa olsun tüm arabalarda ortak olan nedir? Her arabanın bir üretim yılı, model adı ve maksimum hızı vardır. modelBu özellikleri , maxSpeed, ve alanlarına koyuyoruz yearOfManufacture. Davranışa gelince, herhangi bir araba hızlanabilir ve yavaşlayabilir. :) Bu davranışı gas()vebrake()yöntemler. Bu bize ne gibi faydalar sağlıyor? Her şeyden önce, kod miktarını azaltır. Tabii ki ebeveyn sınıfı olmadan da yapabiliriz. Ancak her arabanın hızlanabilmesi ve yavaşlayabilmesi gerektiğinden , , , ve sınıflarında ve diğer her araba sınıfında gas()ve brake()yöntemleri oluşturmamız gerekecek . Ne kadar ekstra kod yazmamız gerekeceğini bir düşünün. Ve , ve alanlarını da unutmayın : eğer ana sınıftan kurtulursak, onları her araba sınıfında yaratmamız gerekecek! TruckSedanF1CarSportsCarmodelmaxSpeedyearOfManufactureSınıflar arasındaki ilişkiler.  Kalıtım, kompozisyon ve toplama - 2Birkaç düzine araba sınıfımız olduğunda, yinelenen kod miktarı gerçekten ciddi hale geliyor. Ortak alanları ve yöntemleri ("durumlar" ve "davranışlar" olarak da adlandırılır) bir üst sınıfa taşımak, çok fazla zaman ve alan kazanmamızı sağlar. Bazı türlerin, diğer araba türlerinde olmayan benzersiz özellikleri veya yöntemleri varsa, önemli değil. Bunları her zaman diğer herkesten ayrı bir alt sınıfta oluşturabilirsiniz.

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Örnek olarak Formula 1 yarış arabalarına bakalım. "Akrabalarının" aksine, benzersiz bir davranışları var - zaman zaman mola veriyorlar. Bu bizi rahatsız etmiyor. Üst sınıftaki ortak davranışı zaten tanımlamıştık Carve alt sınıfların belirli davranışları bu sınıflara eklenebilir. Sınıflar arasındaki ilişkiler.  Kalıtım, kompozisyon ve toplama - 3Aynısı alanlar için de geçerlidir: Bir alt sınıfın benzersiz özellikleri varsa, bu alanları alt sınıf içinde sakince bildiririz ve endişelenmeyi bırakırız. :) Kodu yeniden kullanabilme yeteneği kalıtımın ana avantajıdır. Programcılar için fazladan kod yazmamak çok önemlidir. İşinizde buna defalarca rastlayacaksınız. Lütfen çok önemli başka bir şeyi unutmayın: Java'nın çoklu kalıtımı yoktur.. Her sınıf yalnızca bir sınıfı miras alır. Bunun nedenleri hakkında ilerideki derslerde daha fazla konuşacağız. Şimdilik, sadece hatırla. Bu arada, bu Java'yı diğer bazı OOP dillerinden farklı kılar. Örneğin, C++ çoklu kalıtımı destekler. Kalıtımla ilgili her şey aşağı yukarı açıktır. Hadi devam edelim.

Kompozisyon ve toplama

Sınıflar ve nesneler birbirine bağlanabilir. Kalıtım, bir "is-a" ilişkisini tanımlar. Aslan bir hayvandır. AnimalBöyle bir ilişki, üst sınıf ve Lionalt sınıf olan kalıtım kullanılarak kolayca ifade edilir . Ancak, tüm ilişkiler bu şekilde açıklanmaz. Örneğin klavye kesinlikle bilgisayarla ilişkilidir ama bilgisayar değildir . Eller bir şekilde bir kişiyle ilişkilidir, ancak bir kişi değildir. Bu durumlarda, başka tür bir ilişkimiz var: "bir-a" değil, "bir-a". El bir insan değil, bir insanın parçasıdır. Klavye bir bilgisayar değildir, bilgisayarın bir parçasıdır. Bir has-a ilişkisi, kompozisyon ve toplama kullanılarak kodda açıklanabilir. Fark, ilişkinin "katılığında" yatmaktadır. Basit bir örnek verelim: Bir sınıfımız var Car. Her arabanın bir motoru vardır. Ayrıca her arabanın yolcusu vardır. Engine engineve alanları arasındaki temel fark nedir Passenger[] passengers? Yolcunun Aarabada oturması, yolcuların arabada olmadığı Banlamına gelmez. CBir araba birden fazla yolcuya karşılık gelebilir. Dahası, tüm yolcular bir arabadan inse bile, yine de sorunsuz çalışacaktır. CarSınıf ve dizi arasındaki ilişki Passenger[] passengersdaha az katıdır. Toplama denir . Toplama için başka bir iyi örnek sağlar. Diyelim ki bir sınıfımız Studentve birStudentGroupsınıf. Bir öğrenci birden fazla öğrenci organizasyonuna katılabilir: fizik kulübü, Star Wars hayran kulübü ve/veya öğrenci komedi kulübü. Kompozisyon daha katı bir ilişki türüdür. Kompozisyon kullanırken, bir nesne bir nesnenin parçasıdır ve aynı türden başka bir nesneye ait olamaz. En basit örnek bir araba motorudur. Motor bir arabanın parçasıdır ve başka bir arabanın parçası olamaz. Gördüğünüz gibi, ilişkileri Carve arasındaki ilişkiden çok daha katı Passengers. Sınıflar arasındaki ilişkiler.  Kalıtım, kompozisyon ve toplama - 4
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION