Profili Göster

ActionScript 3.0: Nesne Yönelimli Programlama II: Sınıf (Class) Yapısı

Muttalip TULGAR Tarih: 27/08/2008 Yorum: 5 adet

Okunma : 761 Tutanlar: Bu yazıyı 7 kişi tuttu.

ActionScript 3.0: Nesne Yönelimli Programlama II dersinde sınıf yapılarını inceleyeceğiz.

Bir sınıf yapısı temelde şu üç bölümden oluşur:

a) Özellikler (Properties)

b) Yapılandırıcı Fonksiyon (Constructor Method)

c) Metotlar (Methods)

MMİstanbul

a)Özellikler (Properties):

Bir sınıf tanımı içinde, sınıf elemanlarına( metot veya özellik) erişimi belirleyen niteliklerdir. Örneğin, bir metot "private" ise; o metoda sadece o sınıf içinden erişilebilir. Eğer bir metot "public" ise; o metoda istenilen herhangi bir yerden erişilebilir. ActionScript 3.0’da sınıflara ve sınıf elemanlarına erişimi belirleyen dört özellik vardır."internal", "private", "protected", "public" MMİstanbul

package 
{
public  class Kayit
{
public var  ad:String="Ali";
private var  sifre:Number="12345"; 
}

}
var a:Kayit=new Kayit();
trace(a.ad);//Ali
trace(a.sifre);//Erişilemez

Oluşturulan bir sınıf örneğinin, sınıf içindeki özellik veya metotlara ulaşabilmesi için (.) nokta operatörü kullanılır.
Örneğin; trace(a.ad)

Yukarıda "Kayit.as" adlı bir sınıf dosyası oluşturulmuştur. Bu sınıf dosyası ile aynı paketin içinde olan bir yerden "a" adlı bir Kayit sınıfı örneği oluşturulmakta ve trace(a.ad) ile public olan "ad" değişkenine ulaşılmak istenmektedir."ad" değişkeninin erişim özelliği public olduğu için bu özelliğe her yerden ulaşılabilmektedir ve sonuç olarak "Ali" çıktısı elde edilmektedir.

Ancak; trace(a.sifre) ile private olan "sifre" değişkenine ulaşılmak istendiğinden sonuç olarak derleyici hata verecektir. Çünkü private olan özelliğe sadece o sınıf içinden erişebilir.

  • "protected" ve "private" özellikleri sınıflar için verilmemelidir.
  • Eğer bir sınıfın veya sınıf elemanının erişim özelliği belirtilmemişse, derleyici otomatik olarak o sınıf veya özelliğe "internal" özelliğini verir.

b) Yapılandırıcı Fonksiyon (Constructor Method) :

Bir sınıf örneği oluşturulurken sınıf içinde otomatik olarak oluşturulan özel bir metottur. Constructor, kendi sınıfı ile aynı adı almak zorundadır. Constructor’ın nitelik özelliği ise; "public" olmalıdır. "new" operatörü ile yeni bir sınıf örneği oluşturulduğunda, sınıf içinden çağrılan ilk fonksiyon genellikle constructor olur.

package 
{
    public class Kayit
    {
        public var ad:String="Ali";
        private var soyad:String;
        private var sifre:Number=12345;
        public function Kayit()  
        {
            soyad="Taş";
        }
    }

}
var a:Kayit=new Kayit();
trace(a.soyad);    //Taş

public function Kayit() satırı constructor’ı ifade etmektedir. constructor’dan önce "function" anahtar sözcüğü kullanılmalıdır. Yine constructor adı, sınıf adı ile aynı olmakla beraber adın sonuna, bu ifadenin bir fonksiyon olduğunu belirten () işareti konulmalıdır.

  • "new" operatörü ile "a" adlı bir "Kayit" örneği oluşturulduğunda ilk olarak yapılandırıcı fonksiyon çağrılır.

Böylece trace(a.soyad) satırı ile yapılandırıcı fonksiyon (constructor) içindeki "soyad" değişkenine ulaşılır.

  • Eğer sınıf içinde programcı tarafından bir constructor oluşturulmamışsa, derleyici otomatik olarak boş bir constructor oluşturmaktadır.

c) Metotlar (Methods) :

Bir sınıf yapısında var olan bölümlerden biri de metotlardır. Aslında metotlar, belirli davranışları yerine getirmek için tanımlanan fonksiyonlardan başka bir şey değildir. Bir sınıf örneği oluşturulurken, metot da o örneğe bağlanır. Metotları tanımlarken kullanılan anahtar sözcük; "function" dır.

public  function adSoyad():String
 {
//eylemler
 }

Metotlara isim verirken fonksiyonlardaki isimlendirme gibi sözcüğün ilk karakteri küçük yapılabilir. Eğer iki sözcükten oluşuyorsa metot ismi, ilk sözcüğün ilk karakteri küçük, ikinci sözcüğün ilk karakteri büyük yapılabilir. Bu isimlendirme geleneği olup zorunlu değildir.

public  function adSoyad():String { }

package 
{
    public class Kayit
    {
        public var ad:String="Ali";
        public var soyad:String;
        private var sifre:Number=12345;
        public function Kayit()
        {
            soyad="Taş";
        }
        public function adSoyad():void
        {
            trace(ad+soyad);

        }
    }

}


var a:Kayit=new Kayit();
trace(a.adSoyad());  //  AliTaş

Yukarıdaki örnekte, sınıf içindeki adSoyad() metodunu çağırmak için, "a" nesnesi nokta operatörünü ve metodun adını kullanmıştır. a.adSoyad()

Statik Sınıf Elemanlarına Erişim:

Statik metotlar sınıf içinde kullanılan metotlardır. Bir özelliğin veya metodun niteliğini statik yapmak için "static" anahtar sözcüğü kullanılır. Statik metotlar kullanıldığında, o sınıfın özelliklerine erişebilmek için bir sınıf örneği oluşturmaya gerek kalmamaktadır.

Normalde sınıf içinde tanımlanan özelliklere ve metotlara erişebilmek için, "new" operatörü ile bir sınıf örneği oluşturup o sınıf örneği ile özelliklere ulaşılabilmektedir.

var a:Kayit=new Kayit();
trace(a.adSoyad());  

Yukarıdaki örnekte olduğu gibi "Kayit" sınıfının "a" adlı bir örneği oluşturulup onun üzerinden "adSoyad()" metoduna ulaşılabilmektedir.

  • Ancak (top-level) gibi yüksek seviyeli sınıfların özelliklerine erişmek için, sınıf örneği oluşturmadan direkt o sınıfın adı ve özelliği kullanılmaktadır.

trace(Math.PI); 

Burada Math sınıfı top-level sınıf olduğu için onun tüm özelliklerine ulaşmak için adını ve pi sayısını veren "PI" özelliğini yazmak yeterli olacaktır.

package 
{
    public class Kayit
    {
        public static  var ad:String="Ali";
        public var soyad:String="Taş";
        private var sifre:Number=12345;
        public function Kayit()
        {
            trace(soyad);
        }
    }
}


trace(Kayit.ad);     //  Ali
trace(Kayit.soyad);  //   Hata

Örnekte ise, "Kayit" sınıfının ad özelliğine direkt ulaşabilmektedir. Çünkü sınıf içinde "ad" değişkeni static olarak tanımlanmıştır.

Ancak sınıfın "soyad" değişkenine sınıf adı kullanılarak ulaşılmaya çalışıldığında derleyici hata verecektir.

  • Static olmayan özelliklere erişmek için bir sınıf örneği oluşturulması gerekmektedir.

Bir üst sınıfın kapsama alanında bulunan statik özellikler, kalıtım yoluyla bir alt sınıfa alınırsa, bu özelliklere ulaşmak için ya alt sınıfın bir örneği oluşturulmalı ya da üst sınıfın adı ile özellik çağrılmalıdır.

MMİstanbul

Kayit.soyad;  // Taş;

ya da

var a:Miras=new Miras();
trace(a.soyad);     //  Taş

Dinamik Sınıflar:

Bir sınıf içindeki özelliklere ve metotlara bir sınıf örneği oluşturularak ulaşılabilir. Eğer sınıf örneği, sınıf içinde tanımlanmayan veya var olmayan bir özelliğe ulaşmaya çalıştığında derleyici çalışma anında hata verir.

class Kisi
 {
   var ad:String;
   var soyad:String;
}


var ali:Kisi = new Kisi();
ali.yas = 21;   
trace(ali.yas); // derleyici hata verir

Örnekte "Kisi" sınıfının "ali" adlı bir örneği oluşturulmuştur. Ancak "ali" nesnesi, "yas" özelliğine erişmek isteğinde derleyici hata veririr.

Çünkü sınıf içinde "yas" özelliği tanımlanmamıştır.

Böyle durumlar istenmiyorsa, sınıf yapısı dinamik hale getirilebilir. Bunun için oluşturulan sınıfın başına "dynamic" anahtar sözcüğü getirilmelidir. Böylelikle çalışma anında sınıflarda yer almayan özellik ve metotlar belirtilebilir.

dynamic class Kisi
 {
   var ad:String;
   var soyad:String;
}

var ali:Kisi = new Kisi();
ali.yas = 21;  
trace(ali.yas);  // 21

Get ve Set Metotları:

  • Bir sınıf içinde "private" olarak belirtilen özelliklere, o sınıfın dışından erişilemediği ve değiştirilemediği için, get ve set metotlarına ihtiyaç duyulmaktadır.
package 
{
    public class Kayit
    {
        public var ad:String="Caner";
        public var soyad:String="Kaya";
        private var sifre:Number;

public function set al(sf:Number):void
        {
            sifre=sf;
        }


        public function get al():Number
        {
            return sifre;
        }


    }
}


var ara:Kayit=new Kayit;
ara.al=1357;
trace(ara.al); //  1357

Örnekte, "sifre" adlı "private" değişkene sınıf dışından ulaşılmak istenmektedir. Her ne kadar private özelliğe sınıf dışından ulaşılamasa da, "get" ve "set" metotları "sifre" değişkenine ulaşmamıza ve ona değer atamamıza yardım etmektedir.

Burada "get" ve "set" anahtar sözcükleri belirtilen "al" adlı metotlardan önce olmalıdır.

Aynı zamanda "get" ve "set" anahtar sözcüklerinin kullandığı metot isimleri de aynı olmak zorundadır.

  • "set" metodu, kendisine Number olarak gönderilen parametre değerini, private olarak tanımlanan "sifre" değişkenine atar.
  • "set" metodu en az bir parametreye ihtiyaç duyarken, hiçbir değer de döndürmez.

"get" metodu ise; hiç parametre almazken, çağrıldığı yere artık "sifre" değişkeninin yeni değerini yollar.

Dikkat edildiyse "get" ile "set" , "al" adlı aynı metot ismini kullanmaktadır.

  • "get" ve "set" ile oluşturulan metotların özellikleri "private" olarak ifade edilemez.

Yazan: Muttalip TULGAR

"ActionScript 3.0: Nesne Yönelimli Programlama III: Package (Paketler)" dersinde görüşmek üzere.

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
Savaş Özsoy 2/09/2008

"ActionScript 3.0: Nesne Yönelimli Programlama III: Package (Paketler)" isimli dersi benmi bulamıyorum yok sa ders henüz eklenmemişmi aceba?

Profili Göster
Muttalip TULGAR 2/09/2008

Savaş Bey,

En kısa zamanda dersi yükleyeceğim.

Profili Göster
Şuayip KILIÇ 3/09/2008

bilgine, eline, emeğine sağlık hocam. devamını bekliyor olacağız. selametle

Profili Göster
AS-3.0 AS-3.0 11/09/2008

gerçekten çok teşekkürler güzel bir anlatım programcılık adına öğrenilmesi gereken bir konu üzerinde durmuşsunuz

Profili Göster
serkan çapkat 12/09/2008

devamını beklıoruz insallah:)

yeni üyelik | şifremi unuttum

aç-kapa Toplantı Kahraman ve need4code.com Projesi Connect Toplantısı

Kahraman ve need4code.com Projesi Connect Toplantısı

Selam arkadaslar, Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori: Toplantı

aç-kapa Yarışma Fikir10000 Dijital Pazarlama Fikir Yarışması

Fikir10000 Dijital Pazarlama Fikir Yarışması

ADTECH tarafından düzenlenen Fikir10000 yarışmasına; dijital pazarlama ile ilgili size ait olan fikrinizle katılabilir ve 10.000 YTL’lik birinci...
Kategori: Yarışma

aç-kapa Yarışma 7Dx Demoscene Party

7Dx Demoscene Party

2002 yılından beri amatör bilgisayar kültürü ile ilgilenen insanları bir araya getirmeyi hedefleyen 7DX parti serisinin bu seneki ayağı olan 7D8 Demo ...
Kategori: Yarışma

aç-kapa Eğitim Türkiye'de İnternet Konferansı - Internet Teknolojileri Derneği -22-23 Aralık ODTÜ

Türkiye'de İnternet Konferansı - Internet Teknolojileri Derneği -22-23 Aralık ODTÜ

Etkin Katılım Çağrısı Türkiye’de Internet ile ilgili grupları biraraya getirerek İnternet’i tum boyutlarıyla tanıtmak, gelistirmek, tartı...
Kategori: Eğitim

aç-kapa Konferans Bilgi Güvenliği ve Kriptoloji Konferansı

Bilgi Güvenliği ve Kriptoloji Konferansı

Önemli Tarihler: Etkinlik Tarihi : 24-26 Aralık 2008 Son Bildiri Gönderme Tarihi : 20 Ekim 2008 Bildiri Kabul Tarihi Bildirimi :...
Kategori: Konferans

üyeler Son Kahramanlar...