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. }
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; }
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.
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; }
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; }
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; }
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'; }
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'; } }
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; }
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: