Dart Dersleri #16 - Class - Sınıflar

Dart - Class, Sınıflar

Class nedir? Nesne yönelimli programlama(OOP) dillerinin temelini oluşturan nesneler, belirli bir modele göre oluşturulur. Bu modeller yani class yapıları; oluşturulacak nesnelerin özelliklerini ve işlevlerini içeren basit kod bloklarıdır.

 

Class Tanımlama

Sınıf oluşturmak için basitçe class anahtar kelimesi kullanılır.

class Blog {
  // sınıf işlemleri ve tanımlamaları bu blok içerisinde yapılır.
}
En basit haliyle Blog adında oluşturulan bir class.

Class blokları aşağıdaki yapıları içerebilirler:

  • Fields, basit bir değişken tanımı olabilir. Bu değişkenler oluşturulan nesnelere göre değiştirilebilir ya da sabit değişkenler olabilir.
  • Getters - Setters, private değişkenlere ulaşmak ya da değerlerini güvenli bir şekilde değiştirmek için kullanılan yapılardır.
  • Constructors, sınıfların kurucu görevi taşıyan fonsiyonlarıdır. Dart dilinde isimli ve isimsiz olarak iki farklı kullanımı vardır. Bir sınıftan herhangi bir constructor kullanarak bir nesne oluşturulabilir. Bu nesneyi oluşturan fonksiyon o sınıfın kurucu fonksiyonu olarak tanımlanır. Constructor nesne oluşturulurken bir defa çalışır dolayısıyla nesne ilk oluştuğu anda yapılması gereken işlemler Constructor bloğuna yazılabilir.
  • Functions, önceki derslerde de bahsedildiği gibi tekrar tekrar çalışabilen basit kod bloklarıdır. Her sınıf kendine özgü çok sayıda fonksiyon içerebilir.
Üstte belirtilen yapıları içeren Blog class'ı:
class Blog {

  /// Constructors
  Blog() {
    print('Blog nesnesi oluşturuldu.');
  }

  /// Fields
  static const String name = 'Yazilimblogu';
  String _url = 'https://yazilimblogu.com/';

  /// Getters
  String get url => _url;

  /// Setters
  set url(String val) {
    _url = val;
  }

  /// Functions
  String getUrlWithPath(String path) => url + path;
}
Basitçe blog özelliklerini ve işlevlerini içeren Blog sınıfı. Bu sınfın bir nesnesi oluşturulduktan sonra, o nesne yardımıyla bu özellikler kullanılabilir.
 

Object - Nesne Oluşturma

Bir sınıftan nesne oluşturmak için, o sınıfın basit bir şekilde -ilk kod bloğundaki gibi- tanımlanmış olması yeterlidir.

Blog nesnesi oluşturma:
  final Blog blog = Blog(); /// çıktı: Blog nesnesi oluşturuldu.
blog nesnesi oluşturulurken önce sınıf constructor'ı bloğu çalışacağı için, oluşturulma sırasında bir terminal çıktısı(Constructor içinde print('Blog nesnesi oluşturuldu.'); böyle bir kod kullanıldığı için) verir.
 

Class - Sınıf Üyelerine Erişme

Her sınıfın Fields - Getter - Setter ve Functions gibi üyeleri vardır. Bu üyeler sınıfların nesneleri aracılığıyla ulaşılıp; manipüle edilebilir veya basitçe kullanılabilir.

void main() {
  final Blog blog = Blog(); /// Blog nesnesi oluşturuldu.
  print(blog.url); /// https://yazilimblogu.com/
  print(blog.getUrlWithPath('profile/emreakcadag')); /// https://yazilimblogu.com/profile/emreakcadag
}


class Blog {

  /// Constructors
  Blog() {
    print('Blog nesnesi oluşturuldu.');
  }

  /// Fields
  static const String name = 'Yazilimblogu';
  String _url = 'https://yazilimblogu.com/';

  /// Getters
  String get url => _url;

  /// Setters
  set url(String val) {
    _url = val;
  }

  /// Functions
  String getUrlWithPath(String path) => url + path;
}
Önceki örneklerdeki gibi blog nesnesi oluşturuldu, ardından blog nesnesinin url field'ına erişilip değeri console'a yazdırıldı.
 

Class - Constructors

Bir sınıf objesi oluştururken kullanılan özel bir fonksiyondur. Parametre alabilir.

void main() {
  final Blog blog = Blog('emreakcadag', date: '03.01.2021');
  print(blog.yazar); /// emreakcadag
  print(blog.date); /// 03.01.2021
}


class Blog {

  /// Blog Constructor
  Blog(this.yazar, {String date}) {
    this.date = date ?? 'now';
  }

  final String yazar;
  String date;
}
Örnekteki gibi constructor aracılığıyla nesne oluştururken, sınıf üyeleri manipüle edilebilir.
 

Class - Named Constructors

İsimli constructor, şu ana kadar kullanılan normal constructor yapısıyla aynıdır. Fakat istisna durumlar için veya aynı sınıfın farklı özellikteki objelerini oluşturmak için isimli constructor yapıları kullanılabilir.

void main() {
  /// Constructor
  final Blog blog = Blog('emreakcadag', date: '03.01.2021');
  print(blog.yazar); /// emreakcadag
  print(blog.date); /// 03.01.2021
  print(blog.day); /// Today

  /// Named Constructor
  final Blog namedBlog = Blog.isimliConstructor('emreakcadag', day: 'Sunday');
  print(namedBlog.yazar); /// emreakcadag
  print(namedBlog.date); /// now
  print(namedBlog.day); /// Sunday
}

class Blog {
  /// Blog Constructor
  Blog(this.yazar, {String date}) {
    this.date = date ?? 'now';
  }

  Blog.isimliConstructor(this.yazar, {String day}) {
    date = 'tanımlanmadı';
    this.day = day ?? 'Today';
  }

  final String yazar;
  String date, day;
}
Named constructor örneği.
 

Class - Fields

Yukarıdaki kod bloklarında görüleceği üzere basit değişkenlerdir. Bu değişkenler Constructor methodları üzerinden veya obje erişimi ile çağırılabilir veya manipüle edilebilir.

 

Class - Functions

Basit fonksiyonlardır. Sınıf nesnesi aracılığıyla çağırılabilir. Yalnızca sınıf içi kullanım için private fonksiyonlar oluşturulabilir.

void main() {
  /// Named Constructor
  final Blog blog = Blog();
  print(blog.getUrl()); /// https://yazilimblogu.com
}

class Blog {
  String getUrl() => 'https://yazilimblogu.com';
}
Basit bir sınıf fonksiyon kullanım örneği.
 

Class - Getters & Setters

Yukarıdaki örneklerden de görüleceği üzere, sınıf içi private değişkenlere dışarıdan erişmek veya değişkenin değerinin güvenli bir şekilde değiştirilmesine olanak sağlayan yapılardır.
get ve set anahtar kelimeleri ile getter - setter oluşturulur.

void main() {
  final Blog blog = Blog();
  blog.name = 'yazilimblogu';
  print(blog.name); /// yazilimblogu.com
}

class Blog {
  String _name = 'none';

  String get name => _name;

  set name(String value) {
    _name = value + '.com';
  }
}
Basit bir getter & setter kullanım örneği.
 

this Anahtar Kelimesi

this bir sınıfın içerisinde, o sınıfın o anki objesine işaret eder.

Aşağıdaki örnekte fonksiyon parametresi ve o fonksiyonun bulunduğu sınıfın field'larından biri aynı isimde. O sınıfın field'ına erişmek için this anahtar kelimesi kullanılır.
class Blog {
  String url = 'https://yazilimblogu.com';

  void changeUrl(String url) {
    this.url = url;
  }
}
 

static Anahtar Kelimesi

static anahtar kelimesi ile sınıf içi değişkenler ve fonksiyonlar tanımlanabilir. Bu şekilde tanımlamalar yapılarak sınıf içi üyelerin dışarı açılması sağlanabilir. Yani static olmayan üyelere sadece o sınıfın objesi aracılığıyla erişilebilirken; static üyelere obje oluşturulmadan kullanılabilir. static üyelere sınıf dışından veya sınıf içi diğer üyelerden erişilebilir. Bu static üyeler program çalıştığı süre boyunca memory üzerinde tutulur, bu nedenle çok gerek kalmadıkça kullanılmamalıdır.

void main() {
  print(Blog.baseUrl); /// https://yazilimblogu.com/
}

class Blog {
  static String baseUrl = 'https://yazilimblogu.com/';

  static String getBaseUrl() => baseUrl;
}
static field ve static fonksiyon örneği.
 

Dart dilinde class nedir? Nasıl kullanılır? Sorularını yanıtlandırmaya çalıştık.

Bir sonraki derste görüşmek üzere!

Sorularınızı ve isteklerinizi yorum bölümünden iletebilirsiniz.
Kaynak:
Bu postu paylaş:

0 yorum

Yorum yapmak için giriş yapmanız gerekmektedir. Giriş yap
Henüz hesabınız yoksa 20 saniyenizi ayırıp kayıt olabilirsiniz. Kaydol