Etiket arşivi: nesne

Soyut Metodlar(Abstract Methods) ve Arayüzler(Interfaces)

Daire, dikdörtgen, veya diğer figürler için bir sınıf oluşturmak istersek her sınıfta figürü çizen çiz() ve figürü hareket ettiren taşı() metodları olmalıdır. Daire sınıfında, çiz() metodu ve taşı() metodu dairenin merkezi etrafında gezerek çizim yapar. Burada  çizim sınıfında iki metod ve bunlarla alakalı  sabit tanımlayıcılar tüm figür sınırları için geçerli olmaktadır.

 

public interface Sekil
{
final static int MAX_X_KOORD = 1024;
final static int MAX_Y_KOORD = 768;

/**
* Verilen koordinatın merkezinde şekil nesnesini oluşturur.
*
* @param x - cizilecek figürün x koordinatı.
* @param y - çizilecek figürün y koordinatı.
*/

void ciz(int x, int y);

/**
* Şekli verilen yeni koordinatlara hareket ettirir.
*
* @param x - taşınacak yeni konumun x koordinatı
* @param y - taşınacak yeni konumun y koordinatı.
*
*/

void tasi(int x,int y);

} // Şekil Arayüzü //

Şekil arayüzü iki sabit ve iki soyut metoddan oluşuyor. Arayüz sınıflarında bütün metod ve sabit tanımlayıcıları publictir. Tekrardan başına public yazmaya gerek yoktur. Başka bir sınıf bu arayüzü kullanmak istediğinde buna arayüzü implement eden sınıf denir. Örneğin daire sınıfı gözönüne alırsak :

 

public class Daire implements Sekil {

    // bildirim kısımları:

    private int xKoord,yKoord,yaricap;

    // x,y ve yaricap icin constructorlar

    public Daire(int xKoord, int yKoord, int yaricap) {
        this.xKoord = xKoord;
        this.yKoord = yKoord;
        this.yaricap = yaricap;
    }
    public void ciz(int x, int y) {
        xKoord = x;
        yKoord = y;
    }

    public void tasi(int x, int y) {

    }

    // ve diğer gerekli metodlar...

}

Arayüzlerde constructor bulunmaz çünkü constructorlar her zaman sınıfa özgüdür. Arayüzlerde bu eksiklik onların direk kullanımı engeller. Yani Sekil arayüzümüzden direkt olarak Sekil nesnesi oluşturamayız. Aşağıdaki şekildeki çağırım illegal olacaktır.

Sekil seklim = new Sekil(); // illegal

Loading

Facebooktwitterredditpinterestlinkedinmail

JavaScriptte Nesneler

JavaScript’in temel datatiplerinden birisi objecttir. Nesne kompozit bir yapıdır ve içerisinde birden çok değer tutabilir. Bir çok sırasız özellik(property) den oluşur. Her özelliğin bir adı ve değeri vardır.Property isimleri stringdir. Yani biz stringlerin değerleri map ettiğini söyleyebiliriz. String to value mapping  veriyapısında birçok isimde anılmaktadır: “hash”,”hasttable”,”dictionary”,”associative(ilişkisel) array”. JavaScriptte nesneler başka bir nesnenin özeliiklerini miras alabilir.Bu olaya prototip(prototype) denir.Aynı şekilde nesnenin metodları da miras alınmışssa prototopik miras olarak adlandırılır ve JavaScriptin anahtar öğelerinden birisidir.

JavaScriptte string veya sayı olmayan hemen hemen her şey nesnedir; true,false,null,undefined gibi. Ancak stringler sayılar ve boolean değerler nesne değildir bunlar  “immutable objects(değişmez nesneler )” olarak adlandırılır. Normalde oluşturduğumuz nesneler üzerinde oynamaya yapabiliriz,özellik ekleyip çıkarabiliriz ancak string gibi değişmez nesneler için özellik ekleme çıkarma sözkonusu değildir.Sadece JavaScriptin string için bize tanımladığı özellikleri kullanabiliriz.

Property

Adı ve değeri vardır. Property adı herhangi bir string olabilir.(Boş string de dahil olmak üzere) Ancak bir nesnenin aynı ada sahip iki property’si olamaz. Property değeri JavaScriptte tanımlı herhangi bir değer olabilir.Ek olarak ada ve değere sahip her property, property attributes olarak adlandırılan değerler ile ilişkilidir.

  • writable  attribute, property’nin değerinin setlenip setlenemeyeceğini belirler.
  • enumerable atttribute, property for/in döngüsü içinde kullanılabilir mi onu belirler.
  • configurable attribute, property editlenebilir mi(silme güncelleme ekleme vs) onu belirler.

Nesne Oluşturma

“new” operatörü yeni nesneyi oluşturur ve initialize eder. “new” anahtar kelimesinden sonraki kısım fonksyion çağrımı şeklinde olmalıdır. Örneğin:

  • var o = new Object();
  • var a =new Array();
  • var d = new Date();
  • var r =new RegExp(“js”);

Propertyleri Setleme

Değerin propertysine (.) veya [] içine adını yazarak erişebiliriz.Örneğin:

  • var author = book.author; // Kitabın yazarına setler.
  • var name = author.surname // Yazarın soyadı.
  • var title = book[“main title”] // Kitabın başlığı.

Yeni bir property oluşturmak içinde aynı syntax kullanılır tek fark setleme sol taraftan yapılır.

  • book.edition=6; // book için edition propertysi oluşturduk.
  • book[“main title”]=”JavaScript”; // Main Title Propertysini setledik.

Inheritance[Miras]

JavaScriptte nesneler kendi property kümeleri olarak adlandırılabilir. Aynı şekilde bu nesneler başka prototipleri de kendi üzerlerine miras alabilir. Burada bilinmesi gereken kısım miras alınan prototip miras alan nesnenin yaptığı değişimlerden etkilenmez. Örneğin;

  • var unitcircle = { r:1 }; // Miras alınacak nesne.
  • var c = inherit(unitcircle); // c nesnesi r propertysini miras alıyor.
  • c.x = 1; c.y = 1; // c kendine ait 2 property tanımlıyor.
  • c.r = 2; // c miras aldığı property üzerine yazıyor.
  • unitcircle.r; // => 1:  Prototip nesnesinde değişme olmadı değer hala 1.

 

Propertyleri silmek için delete operatörü kullanılır.

  • delete book.author; // author propertysini sildik.
  • delete book[“main title”]; // Aynı şekilde main title propertysini sildik.

Property Getter ve Setter’ları

Daha önce bahsettiğim gibi nesnenin propertysinin adı değeri ve özellik kümesi bulunur. Property değerleri getter ve setter metodlarıyla setlenebilir. Bu ECMAScript 5 ile tanımlanmıştır. Getter ve setter propertye erişim aracı olarakta tanımlanabilir. Eğer bir propertyde sadece getter metodu var bu onun read-only olduğunu gösterir. Hem getter hem setter tanımlıysa hem okunabilir hem yazılabilirdir.

Nesne Özellikleri (Object Attributes)

Her nesne 3 özellikler ilişkilidir bunlar: Prototip(Protoype), sınıf(class) ve genişletilebilir(extensible).

Prototip(Prototype) Özelliği : Nesnenin prototip özelliği o nesnenin hangi özellikleri miras aldığını belirler. Temel olarak nesnenin iskeletini oluşturur.Bu açıdan önemlidir.Prototip attribute’u nesne create edildiğinde oluşturulur.

Sınıf(Class) Özelliği : Class atttribute’u nesnenin tipi hakkında bilgi sağlar. classof() fonksiyonu ile  nesnenin hangi sınıfa ait olduğuna bakabiliriz.

  • classof(null) // => “Null”
  • classof(1) // => “Number”
  • classof(“”) // => “String”
  • classof(false) // => “Boolean”
  • classof({}) // => “Object”
  • classof([]) // => “Array”
  • classof(/./) // => “Regexp”
  • classof(new Date()) // => “Date”
  • classof(window) // => “Window” (a client-side host object)

Genişletilebilir(The Extensible) Özelliği : Bu özellik nesneye yeni property eklenebilir mi eklenemez mi onu belirler. Genelde kullanıcı tanımlı tüm nesneler genişletilebilir nesnelerdir. Object.isExtensible() metoduyla bu özelliğinvar olup olmadığını sorgulayabiliriz.

Loading

Facebooktwitterredditpinterestlinkedinmail

JavaScript Wrapper Nesneleri

JavaScript nesneleri kompozit değerlerdir: Özelliklerin koleksiyonu veya isimlendirilmiş değerler.Bi değerin özelliğine “.” notasyonu ile erişiriz.Eğer değerin özelliği bir fonksiyonsa method olarak adlandırılır.  Eğer “o” objesinin “m” methodunu çağırmak istiyorsak , o.m() yazarız. Ayrıca stringlerinde özellikleri ve metodları olduğunu görüyoruz.

stringprops

 

Stringler aslında obje değiller ancak niçin property’leri var?

 

Stringin propertysine ulaşmayı denediğinizde JavaScript bu değeri bi object olan String(s) türüne çevirir.Bu obje ise çeşitli string metodlarını miras alarak kullanmamıza olanak tanır. Nesnenin propertysi çözümlendikten sonra yeni oluşturulan nesne atılır. Bunlara geçici nesneler gözüyle bakabiliriz. Sayılar ve boolean değerlerinde aynı sebeplerden dolayı metodları bulunur. Number() veya Boolean() constructor’ından geçici nesne oluşturulur ve çözümlendiğinde atılır. Null ve undefined değerler için wrapper object yoktur. Bu değerlerin propertylerine erişmeye çalışırsak TypeError alırız.

Aşağıdaki kodu inceleyelim:

 

wrapper
Burada göründüğü gibi t değeri undefined’tır. s.len olduğu kısım koşulurken geçici String nesnesi oluşturulur ve property sine 4 atanır daha sonra obje atılır. 3 satırda ise eski setlediğimiz değere ulaşmaz.Yeni bir String nesnesi oluşur ve ona ulaşır.Yeni oluşturduğumuz String nesnesininde .len property’si setlenmemiş olacağından t değeri undefined olur.

Burada bilmemiz gereken şey string,number ve boolean değerler için tanımlı wrapper objeleri read-only’dir bunların üzerinde oynama yapamayız.Yapsak bile bir değişiklik olmaz.Çünkü nesne yeniden oluşturulup atılır.

wrapperobjects

Loading

Facebooktwitterredditpinterestlinkedinmail