Groovy - Nesne Yönelimli

Groovy'de, diğer herhangi bir Nesne Yönelimli dilde olduğu gibi, programlama dilinin nesnel yönelimli doğasını temsil eden sınıflar ve nesneler kavramı vardır. Groovy sınıfı, bir veri koleksiyonudur ve bu veriler üzerinde çalışan yöntemlerdir. Birlikte, bir sınıfın verileri ve yöntemleri, problem etki alanından bazı gerçek dünya nesnelerini temsil etmek için kullanılır.

Groovy'deki bir sınıf, bu sınıf tarafından tanımlanan nesnelerin durumunu (verileri) ve davranışını bildirir. Dolayısıyla, bir Groovy sınıfı, bu sınıf için hem örnek alanlarını hem de yöntemleri açıklar.

Aşağıda Groovy'deki bir sınıf örneği verilmiştir. Sınıfın adı Öğrenci'dir ve iki alanı vardır -StudentID ve StudentName. Ana işlevde, bu sınıfın bir nesnesini oluşturuyoruz veStudentID ve StudentName nesnenin.

class Student {
   int StudentID;
   String StudentName;
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe"     
   } 
}

alıcı ve ayarlayıcı Yöntemleri

Herhangi bir programlama dilinde, örnek üyelerini private anahtar sözcüğüyle gizlemek ve bunun yerine örnek değişkenlerinin değerlerini buna göre ayarlamak ve almak için alıcı ve ayarlayıcı yöntemler sağlamak her zaman bir uygulamadır. Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.

class Student {
   private int StudentID;
   private String StudentName;
	
   void setStudentID(int pID) {
      StudentID = pID;
   }
	
   void setStudentName(String pName) {
      StudentName = pName;
   }
	
   int getStudentID() {
      return this.StudentID;
   }
	
   String getStudentName() {
      return this.StudentName;
   }
	
   static void main(String[] args) {
      Student st = new Student();
      st.setStudentID(1);
      st.setStudentName("Joe");
		
      println(st.getStudentID());
      println(st.getStudentName());
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

1 
Joe

Yukarıdaki programla ilgili aşağıdaki temel noktalara dikkat edin -

  • Sınıfta hem öğrenci kimliği hem de öğrenciAdı özel olarak işaretlenir, bu da sınıf dışından erişilemeyeceği anlamına gelir.

  • Her örnek üyenin kendi alıcı ve ayarlayıcı yöntemi vardır. Getter yöntemi, örnek değişkeninin değerini döndürür, örneğin yöntem int getStudentID () ve setter yöntemi, örnek kimliğinin değerini ayarlar, örneğin yöntem - void setStudentName (String pName)

Örnek Yöntemleri

Normalde sınıfın içine, sınıf için bir çeşit işlevsellik sağlayan daha fazla yöntem eklemek doğaldır. Öğrenci örneğimizde, öğrencinin 3 konudaki notlarını belirtmek için Marks1, Marks2 ve Marks3 örnek üyelerini ekleyelim. Daha sonra öğrencinin toplam puanını hesaplayacak yeni bir örnek yöntemi ekleyeceğiz. Kodun nasıl görüneceği aşağıdadır.

Aşağıdaki örnekte, Toplam yöntemi, içinde bazı mantığın yerleşik olduğu ek bir Örnek yöntemidir.

class Student {
   int StudentID;
   String StudentName;
	
   int Marks1;
   int Marks2;
   int Marks3;
	
   int Total() {
      return Marks1+Marks2+Marks3;
   }
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName="Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 30;
		
      println(st.Total());
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

60

Birden Çok Nesne Oluşturma

Ayrıca bir sınıfın birden çok nesnesini de oluşturabilirsiniz. Aşağıda bunun nasıl başarılabileceğinin bir örneği var. Burada 3 nesne oluşturuyoruz (st, st1 ve st2) ve buna göre örnek üyelerini ve örnek yöntemlerini çağırıyoruz.

class Student {
   int StudentID;
   String StudentName;
	
   int Marks1;
   int Marks2;
   int Marks3;
	
   int Total() { 
      return Marks1+Marks2+Marks3;
   } 
	
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 30;
		
      println(st.Total()); 
   
      Student st1 = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10;
      st.Marks2 = 20;
      st.Marks3 = 40;
		
      println(st.Total());  
        
      Student st3 = new Student();
      st.StudentID = 1;
      st.StudentName = "Joe";
		
      st.Marks1 = 10; 
      st.Marks2 = 20;
      st.Marks3 = 50;
		
      println(st.Total());
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

60 
70 
80

Miras

Kalıtım, bir sınıfın diğerinin özelliklerini (yöntemleri ve alanları) elde ettiği süreç olarak tanımlanabilir. Kalıtımın kullanılmasıyla, bilgiler hiyerarşik bir sırada yönetilebilir hale getirilir.

Diğerinin özelliklerini miras alan sınıf, alt sınıf (türetilmiş sınıf, alt sınıf) olarak bilinir ve özellikleri miras alınan sınıf, üst sınıf (temel sınıf, ana sınıf) olarak bilinir.

Uzatmalar

extendsbir sınıfın özelliklerini devralmak için kullanılan anahtar kelimedir. Aşağıda, extends anahtar kelimesinin sözdizimi verilmiştir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Kişi adında bir sınıf oluşturmak. Bu sınıfın ad adında bir örnek üyesi vardır.

  • Kişi sınıfından uzanan Öğrenci adlı bir sınıf oluşturmak. Person sınıfında tanımlanan örnek üye adının Student sınıfında devralındığına dikkat edin.

  • Student sınıfı yapıcısında, temel sınıf yapıcısını çağırıyoruz.

  • Öğrenci sınıfımıza, StudentID ve Marks1'in 2 ek örnek üyesini ekliyoruz.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      st.Marks1 = 10;
      st.name = "Joe";
		
      println(st.name);
   }
} 

class Person {
   public String name;
   public Person() {}  
} 

class Student extends Person {
   int StudentID
   int Marks1;
	
   public Student() {
      super();
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe

İç Sınıflar

İç sınıflar başka bir sınıf içinde tanımlanır. Çevreleyen sınıf, her zamanki gibi iç sınıfı kullanabilir. Öte yandan, bir iç sınıf, özel olsalar bile, kendi çevreleyen sınıfının üyelerine erişebilir. Çevreleyen sınıf dışındaki sınıfların iç sınıflara erişmesine izin verilmez.

Aşağıda Outer ve Inner sınıfına bir örnek verilmiştir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Dış sınıfımız olacak Outer adında bir sınıf oluşturmak.
  • Outer sınıfımızda isim adlı bir dizge tanımlama.
  • Outer sınıfımızın içinde bir Inner veya iç içe sınıf oluşturmak.
  • İç sınıfta Outer sınıfta tanımlanan örnek üye adına erişebildiğimize dikkat edin.
class Example { 
   static void main(String[] args) { 
      Outer outobj = new Outer(); 
      outobj.name = "Joe"; 
      outobj.callInnerMethod() 
   } 
} 

class Outer { 
   String name;
	
   def callInnerMethod() { 
      new Inner().methodA() 
   } 
	
   class Inner {
      def methodA() { 
         println(name); 
      } 
   } 
	
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe

Soyut Sınıflar

Soyut sınıflar, genel kavramları temsil eder, bu nedenle alt sınıflara ayrılmak üzere yaratıldıklarından somutlaştırılamazlar. Üyeleri alanlar / özellikler ve soyut veya somut yöntemleri içerir. Soyut yöntemlerin uygulaması yoktur ve somut alt sınıflar tarafından uygulanmalıdır. Abstract sınıfları abstract anahtar sözcüğü ile bildirilmelidir. Soyut yöntemler ayrıca abstract anahtar sözcüğü ile bildirilmelidir.

Aşağıdaki örnekte, Person sınıfının artık soyut bir sınıf haline getirildiğini ve somutlaştırılamayacağını unutmayın. Ayrıca, soyut sınıfta, uygulama ayrıntısı içermeyen DisplayMarks adlı soyut bir yöntem olduğunu unutmayın. Öğrenci sınıfında uygulama detaylarının eklenmesi zorunludur.

class Example { 
   static void main(String[] args) { 
      Student st = new Student(); 
      st.StudentID = 1;
		
      st.Marks1 = 10; 
      st.name="Joe"; 
		
      println(st.name); 
      println(st.DisplayMarks()); 
   } 
} 

abstract class Person { 
   public String name; 
   public Person() { } 
   abstract void DisplayMarks();
}
 
class Student extends Person { 
   int StudentID 
   int Marks1; 
	
   public Student() { 
      super(); 
   } 
	
   void DisplayMarks() { 
      println(Marks1); 
   }  
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Joe 
10 
null

Arayüzler

Bir arayüz, bir sınıfın uyması gereken bir sözleşmeyi tanımlar. Bir arabirim yalnızca uygulanması gereken yöntemlerin bir listesini tanımlar, ancak yöntemlerin uygulanmasını tanımlamaz. Bir arabirim, arabirim anahtar sözcüğü kullanılarak bildirilmelidir. Bir arabirim yalnızca yöntem imzalarını tanımlar. Bir arayüzün yöntemleri her zamanpublic. Arabirimlerde korumalı veya özel yöntemlerin kullanılması bir hatadır.

Aşağıda, harika bir arayüzün bir örneğidir. Aşağıdaki örnekte aşağıdaki şeyleri yapıyoruz -

  • Marks adlı bir arabirim oluşturmak ve DisplayMarks adlı bir arabirim yöntemi oluşturmak.

  • Sınıf tanımında, arayüzü uygulamak için implements anahtar sözcüğünü kullanıyoruz.

  • Arayüzü uyguladığımız için, DisplayMarks yöntemi için uygulama sağlamamız gerekiyor.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10;
      println(st.DisplayMarks());
   } 
} 

interface Marks { 
   void DisplayMarks(); 
} 

class Student implements Marks {
   int StudentID
   int Marks1;
	
   void DisplayMarks() {
      println(Marks1);
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

10
null