Uyarılar :
- Bu sayfada yazılanlar yeniden yayınlanamaz.
- Bu örnek ders sırasındaki anlatımlardan derlenmiştir. Özellikle bir makale şeklinde yazılmamıştır. Bilgilerde eksiklikler bulunabilir.
Sınıflar :
-
Bilgisayar programlamada sınıflar (class) vasıtasıyla
program kendi görevlerini yerine getiren daha küçük parçalara
bölünür. Bu program parçaları (sınıflar) bir işin nasıl
yapılacağını tanımlarlar. Programın çalışması sırasında
hafızada sınıfların canlı örnekleri (nesneler) oluşturularak
çalıştırılır.
-
Sınıflar modül olarak da düşünülebilir. Yani bir sınıf tanımlaması
başka programlara eklenerek de kullanılabilir. Böylelikle bir sınıf
bir çok yazılımda işe yarar.
-
Sınıfları bir toplum içindeki kendi işinde uzmanlaşmış ve aynı zamanda
sadece kendi işine odaklanmış kişilere de benzetebilirsiniz. Bu kişiler
sayesinde yöneticiler daha genel işlere odaklanarak yeni projeler
geliştirmeye zaman ve imkan bulabilir ve daha iyi işler yapabilir.
Programcı da sınıflar sayesinde sınıfların yaptığı işlerle veya sınıfları
yazmakla ayrıca uğraşmak zorunda kalmaz, bir kez yazdığı sınıfı veya başkalarının
yazdığı sınıfları defalarca kullanabilir ve programın genel amaçlarına odaklanıp
daha büyük işler başarmak için zaman ve imkan bulabilir.
-
Sınıfların bir avantajı da hata ayıklamayı kolaylaştırmasıdır. Sınıfların
yaptığı işleri gerçekleştiren kodlarla programın diğer kodları veya diğer
sınıfların kodları birbirine karışmadığından her sınıf veya programın kendisi
ayrı ayrı ele alınarak daha küçük ve karmaşık olmayan kodlarla uğraşılmış
olur, bu şekilde daha az hata içeren programlar yazılabilir veya varsa hatalar daha
çabuk tespit edilebilir ve daha çabuk giderilebilir.
-
Bazı programcılar sadece sınıflar yazarak çok yetenekli ve gelişmiş sınflar
oluştururlar. Bunları diğerlerinin kullanımına sunarlar. Böylelikle her programcı
her şeyi bilmek zorunda kalmadan program yazabilir (Örneğin .NET Framework Sınıf
Kütüphanesi (.NET Framework Class Library) bizlere, yazmak için bilgimizin ve / veya
vaktimizin yetmeyeceği binlerce işe yarar sınıf sunar).
-
PHP, C# veya Java gibi tam olarak nesneye yönelik bir programlama dili olmasa da sınıf
tanımlamak ve kullanmak için ihtiyacımız olan bir çok şeyi barındırır.
Örnek :
<html>
<head><title>Sınıflar</title></head>
<body>
<?php
// Bir sınıf tanımlanıyor..
class Baslik
{
// Sınıfın özelliği olarak kullanılacak değişkenler tanımlanıyor ...
// Bu değişkenlere dışarıdan erişilerek istenmeyen değerlerin
// verilmesini engellemek için Private olarak tanımlıyoruz. Değişkenler
// bu şekilde tanımlandığında bu değişkenlere sınıf tanımlamalarının
// (bu kodların) dışından erişilemez. Ancak altta da görüleceği gibi
// bu değişkenlerin (sınıfın özelliklerinin) değerlerini değiştirmek
// için özel fonksiyonlar yazacağız.
private $zeminRengi;
private $yaziRengi;
private $icerikHTML;
// Yapılandırıcı tanımlanıyor :
// Yapılandırıcılar, sınıf örneklerini (nesneleri)
// oluşturmak için çalıştırılan fonksiyonlardır (metodlar)
// ve nesneyi ilk kullanıma hazırlamak için yapılması
// gereken işlemler ve özelliklere verilmesi gereken
// ilk değerler vb. işlemler varsa bunlar da yapılandırıcıların
// içinde gerçekleştirilir. Örneğin altında göreceğiniz $baslik1, $baslik2
// gibi değişkeler, bu sınıftan oluşturulmuş birer nesnedir ve bu sınıfın bütün
// özellik ve yöntemlerine sahiptirler. Örneğimizde, zorunlu olmamakla beraber
// nesnenin özelliklerinin, başlangıç değerlerini atamak için yapılandırıcıdan
// yararlanılıyor. Yapılandırıcıların bu şekilde tanımlanması
// birden fazla özellikleri bir seferde değiştirmeye imkan tanıdığından
// oldukça kullanışlıdır.
// $this ifadesi sınıfın kendi referansıdır (kendisini işaret eder,
// kendisine başvurmak için kulanılır).
// $this->yaziRengi ifadesi ise bu sınıfın yaziRengi özelliği demektir.
function __construct($iMetin, $yRenk = "white", $zRenk="red")
{
// Bir özelliğe değer atarken özellik adının yanına $ işareti
// konulmadığına dikkat edin ($this->$yaziRengi değil $this->yaziRengi yazdık)
$this->yaziRengi = $yRenk;
$this->zeminRengi = $zRenk;
$this->icerikHTML = $iMetin;
}
// Sınıfın özellikleri (örneğimizde yazı için yaziRengi ve zemin
// rengi için zeminRengi gibi) yukarıda tanımlanıp açıklandığı gibi
// Private (özel / bu kodlara özel / bu kodların dışından erişilemeyen)
// olarak tanımlandıklarından
// bu kodların dışından erişilemez. Sınıfı kullanan kişinin değiştirmek için bu fonksiyonları kullanmak zorunda
// kalacak. Biz de fonksiyonların içinde değiştirilmek istenen değerin
// uygun olup olmadığını denetleme veya değiştirmeden önce ya da sonra
// sonra yapılacak işlemler varsa bunlar için fırsat bulacağız. Buna
// nesneye yönelik programlamada sarmalama (Encapsulation) denir.
function zeminRengiDegistir($renk){
if ($this->yaziRengi != $renk) // Zemin rengi, yazı rengi ile aynı yapılmak isteniyorsa değiştirme. Yazılar görünmez...
$this->zeminRengi = $renk;
}
function yaziRenginiDegistir($renk) {
if ($this->zeminRengi != $renk) // Yazı rengi, zemin rengi ile aynı yapılmak isteniyorsa değiştirme. Yazılar görünmez...
$this->yaziRengi = $renk;
}
function icerikHTMLniDegistir($metin) { $this->icerikHTML = $metin; }
// Sınıfın bir metodu. Metodlar, sınıfın yapacağı işleri tanımlarlar.
// Örneğimizdeki metod, sınıfın özelliklerini kullanarak HTML çıktısına
// başlık olarak kullanılabilecek bir DIV etiketi yazdırıyor...
function goster()
{
// Sınıfın özelliklerini DIV etiketinin STYLE özelliğine ve
// içeriğine ekle. Bu şekilde bir etiket oluştur ve etiketi
// HTML çıktısına yaz...
echo "<div style=\"padding:10px;margin:5px;color:" .
$this->yaziRengi .
";background-color:" .
$this->zeminRengi .
"\">" .
$this->icerikHTML .
"</div>";
}
} // Sınıf tanımlamalarının sonu...
// Sınıfın örneğini tutacak bir değişken tanımlanarak (bu değişkenlere nesne
// denir) new SınıfAdı (Örneğimizde new Baslik) yazarak örnek oluşturuyoruz.
// Oluşturduğumuz örneği değişkene atıyoruz.
$baslik1 = new Baslik;
$baslik2 = new Baslik;
// Nesnenin özelliklerini değiştiriyoruz...
$baslik1->zeminRengiDegistir("red");
$baslik1->yaziRenginiDegistir("white");
$baslik1->icerikHTMLniDegistir("Nesne olarak tanımlanan etikete yazılan.");
// 2. nesnenin özelliklerini değiştiriyoruz...
$baslik2->zeminRengiDegistir("red");
$baslik2->yaziRenginiDegistir("white");
$baslik2->icerikHTMLniDegistir("Nesne olarak tanımlanan 2. etikete yazılan.");
// Nesnenin bir metodunu çağırıyoruz (metod nesneyi belirlenen özelliklere göre
// HTML çıktısına yazdırıyor.
$baslik1->goster();
// 2. nesnenin goster() metodu çağırılıyor...
$baslik2->goster();
// Başka bir örnek oluştur...
$baslik3 = new Baslik;
// Nesnenin yapılandırıcısını kullanarak tüm özelliklerini değiştir...
$baslik3->construct("white","blue","Başka bir başlık...");
// Nesnenin goster() metodunu çağır...
$baslik3->goster();
?>
</body>
</html>