Kurs
DataCamp kısa süre önce ilk Scala kursunu yayımladı: Introduction to Scala. Göz atın!
Ayrıca şu eğitimlere de göz atın:
Giriş
Genel olarak, Nesne Yönelimli Programlama (OOP) sınıflardan ve nesnelerden oluşur ve polimorfizm, kalıtım gibi gerçek dünya varlıklarını uygulamayı amaçlar.
OOP, daha iyi yazılım bakımıyla geliştirmeyi çok daha hızlı ve ucuz hale getirir. Bunun başlıca nedeni, desteklediği özelliklerin fazlalığıdır; gereksinime göre gelecekte kolayca yeniden kullanılabilen sınıflar ve nesneleriniz vardır; bu, sınıf ve nesnelerden yoksun bir programa kıyasla büyük avantaj sağlar. Bu da, yeni yöntemler ve özniteliklerle genişletilebilen, daha yüksek kaliteli yazılıma yol açar.
Diyelim ki bir araba showroom'unuz var; her birkaç ayda bir yeni bir araba piyasaya çıkıyor ve izleyicileri adından ve özelliklerinden haberdar etmek için sıfırdan yeni yöntemler, öznitelikler tanımlamanız gerekiyor. Oysa nesne yönelimli bir programınızda bir car sınıfı varsa, tek yapmanız gereken bu yeni araba için bir nesne eklemek ve aracın bilgileriyle sınıfın yöntemlerini ve özniteliklerini çağırmak olacaktır.
Sınıf, nesneler için bir temsil veya tasarım olarak düşünülebilir. Sınıfların genellikle kendi yöntemleri (davranış) ve öznitelikleri olur.
Öznitelikler, her bir nesneyi diğerinden ayıran ve bir nesnenin çeşitli niteliklerini belirleyen bireysel varlıklardır. Yöntemler ise programlamada bir fonksiyonun genellikle çalışmasına daha çok benzer. Sınıfın örneğinin nasıl çalıştığını belirlerler. Çoğunlukla yöntemler (davranış) sayesinde, nesneler üzerinde bir şeyler yapılabilir hale gelir.
Yukarıdaki şekil, nesne yönelimli programlamanın akışı hakkında veya daha spesifik olarak bir sınıfın nasıl göründüğü hakkında daha fazla sezgi verir. Yukarıdaki resimde, class car vardır; attributes: fuel, max speed içerir ve model, make gibi daha fazla özniteliğe de sahip olabilir. refuel(), getFuel(), setSpeed() gibi farklı methods kümeleri vardır ve bazı ek yöntemler change gear, start the engine, stop the engine olabilir.
Dolayısıyla belirli bir arabadan bahsettiğinizde, bir sınıfın somut örneği olan bir nesneniz olur.
Şimdi, Scala'da nesne yönelimli programlamadan bahsedelim.
Scala'da Sınıflar ve Nesneler
C++ ve Java'ya benzer şekilde, Scala'da nesne yönelimli programlama büyük ölçüde aynı kuralları izler. classes ve objects tanımlama ve sınıf içinde constructors kavramına sahiptir; Scala'da nesne yönelimli programlama bundan ibarettir.
Sınıf Bildirimi
class Class_name{
// methods and attributes
}
Scala'da sınıf, class anahtar sözcüğü ve ardından sınıf adıyla tanımlanır ve genel olarak sınıf adı büyük harfle başlar. Scala sınıf bildiriminde isteğe bağlı olarak kullanılabilecek birkaç anahtar sözcük vardır: class-name, büyük harfle başlamalıdır; superclass, extend anahtar sözcüğünden sonra gelen üst sınıf adı; traits, extend anahtar sözcüğünden sonra gelen, sınıf tarafından uygulanmış virgülle ayrılmış bir listedir.
Scala'da bir sınıf yalnızca bir üst sınıftan kalıtım alabilir; yani Scala çoklu kalıtımı desteklemez. Ancak bu, Traits kullanılarak sağlanabilir.
Son olarak, Scala'da bir sınıfın gövdesi süslü parantezlerle {} çevrilidir.
// Name of the class is Car
class Car
{
// Class variables
var make: String = "BMW"
var model: String = "X7"
var fuel: Int = 40
// Class method
def Display()
{
println("Make of the Car : " + make);
println("Model of the Car : " + model);
println("Fuel capacity of the Car : " + fuel);
}
}
object Main
{
// Main method
def main(args: Array[String])
{
// Class object
var obj = new Car();
obj.Display();
}
}
Yukarıdaki kodu class.scala adıyla kaydedip terminalde scala class.scala olarak çalıştırabilirsiniz; aşağıdaki çıktıyı görmelisiniz.
Ancak, yukarıdaki kod bir nesne yönelimli programın sunduğu ayrıcalıkları tam olarak kullanmıyor. Çünkü bu kodun çıktısı, kaç kez çalıştırırsanız çalıştırın aynı sonucu döndürecektir. Sınıf içinde statik değişkenler tanımladınız ve bu değişkenlerin değerleri, sonsuz sayıda yeni nesne oluştursanız bile sabit kalacaktır. Sonuç olarak, sizden bir Mercedes Benz veya bir Ferrari için ayrıntılar vermesini bekleyemezsiniz.
Scala'da Kurucu Metot (Constructor)
Kurucular esas olarak nesnenin durumunu başlatmak için kullanılır. Bu başlatma, nesne oluşturma anında gerçekleşir ve yalnızca bir kez çağrılır.
Scala'da iki tür kurucu vardır: Primary ve Auxiliary. Bu eğitimde birincil kurucuyu öğreneceksiniz (Kaynak: O'Reilly).
class Class_name(Parameter_list){
// methods, attributes
}
Birincil kurucu, sınıfla aynı gövdeyi içerir ve sınıf tanımıyla birlikte örtük olarak oluşturulur. Sınıf tanımında başlar ve sınıfın tüm gövdesini kapsar. Ayrıca, Scala programında yalnızca bir kurucu varsa buna birincil kurucu denir. Birincil kurucu sıfır, bir veya daha fazla parametreyle tanımlanabilir.
Şimdi önceki örneği ele alalım, fakat bu kez birincil kurucu özelliğini buna ekleyip etkisini gözlemleyelim.
Ayrıca burada bir sınıfın yeni bir özelliğini öğreneceksiniz; yani bir sınıf birden çok nesneye veya örneğe sahip olabilir ve bunların her biri birbirinden bağımsızdır.
// Name of the class is Car
class Car(make: String, model: String, fuel: Int)
{
// Class method
def Display()
{
println("Make of the Car : " + make);
println("Model of the Car : " + model);
println("Fuel capacity of the Car : " + fuel);
}
}
object Main
{
// Main method
def main(args: Array[String])
{
// Multiple Class object
var obj1 = new Car("BMW", "X7", 40);
var obj2 = new Car("Mercedes Benz", "S350D", 50);
obj1.Display();
obj2.Display();
}
}
Hızlıca çıktıya bakalım:

Harika değil mi? Bir kurucunun yardımıyla daha etkili sonuçlar üretebildiniz.
Scala'da Nesne Bildirimi
Scala'da nesne bildirmek, bir sınıfı örneklemek veya çağırmak olarak da adlandırılabilir. Sınıflara benzer şekilde, nesneler de nesne yönelimli programlamanın temel birimidir.
Bir nesne üç özelliğe sahip olabilir (Kaynak: GeeksforGeeks:
State:Bir nesnenin öznitelikleri onu temsil eder. Ayrıca bir nesnenin özelliklerini yansıtır.Behavior:Bir nesnenin yöntemleri onu temsil eder. Ayrıca bir nesnenin diğer nesnelerle etkileşimde verdiği tepkiyi yansıtır.Identity:Bir nesneye benzersiz bir ad verir ve bir nesnenin diğer nesnelerle etkileşime girmesini sağlar.
Köpeği bir nesne olarak ele alın ve kimliği, durumu ve davranışı için aşağıdaki diyagrama bakın.
Tüm örnekler veya nesneler sınıfın özniteliklerini ve yöntemlerini paylaşır. Bir sınıfın birden çok nesnesi olabilir; burada öğrendiğiniz gibi. Ancak her nesnenin durumu veya değerleri benzersizdir.
Son olarak, birincil kurucular, sınıf değişkenleri, öznitelikler ve yöntemlerin tek bir kodda bir araya getirildiği bir kod yazacaksınız.
Aşağıda, Motorcycle sınıfında bir araya getirilen bileşenlerin görsel bir gösterimi yer almaktadır.
Aşağıdaki kod oldukça açıklayıcıdır; yüksek seviyede ise motosiklet motorunun on mu yoksa off mu olduğunu kontrol eder. Başlangıçta motor kapalı duruma getirilir, durumunu size bildirir ve sonra motoru açar.
class Motorcycle(make:String,color:String) {
var engineState: Boolean = false;
def startEngine() {
if (engineState == true){
println("The engine is already on.");
}
else {
engineState = true
println("The engine is now on.");
}
}
def showAtts() {
println("This motorcycle is a "+ color + " " + make);
if (engineState == true){
println("The engine is on.");
}
else{
println("The engine is off.");
}
}
}
object Main
{
def main (args: Array[String])
{
var m = new Motorcycle("BMW K 1600 GTL","White");
println("Calling showAtts...");
m.showAtts();
println("------");
println("Starting engine...");
m.startEngine();
println("------");
println("Calling showAtts...");
m.showAtts();
println("------");
println("Starting engine...");
m.startEngine();
}
}

Tebrikler!
Bu eğitimi tamamladığınız için tebrikler.
Artık Scala'da sınıf ve yöntemleri nasıl bildirileceğini, nesnelerin nasıl örnekleneceğini, özniteliklerinin nasıl ayarlanacağını ve örnek yöntemlerinin nasıl çağrılacağını biliyorsunuz. Bu kavramlar yalnızca Scala'da değil, diğer programlama dillerinde de işinize yarayacaktır.
Nesne yönelimli programlama kavramları hem ilgi çekici hem de oldukça güçlüdür. Kodunuza yeni bir boyut katar, yeniden kullanılabilir hale getirir. Programınız büyüdükçe kodunuzun karmaşıklığı artar. Kalıtım, çok biçimlilik, örnek yöntemleri gibi nesne yönelimli programlama kavramlarında öğrenilecek çok şey vardır. Bir diğer güçlü özellik ise Singleton'dır. Tasarım ilkeleri, kodunuzu daha yapılandırılmış ve okunabilir tutmaya yardımcı olur. Tasarım kalıpları hakkında daha fazlası için bu kitabı okumayı düşünebilirsiniz.
Lütfen bu eğitimle ilgili tüm sorularınızı aşağıdaki yorumlar bölümünde sormaktan çekinmeyin.
Son olarak, DataCamp'teki yeni Scala kursunu unutmayın: Introduction to Scala.
