
OOP'de Classes, Objects, Properties ve Methods
Sınıflar, nesneler, özellikler ve yöntemler bilginin temelini oluşturur.Object-Oriented Programming. Geliştiricilerin kodu gerçek kavramlar etrafında düzenlemesine, ilgili verileri ve davranışları bir arada tutmasına ve anlaşılması, yeniden kullanılması, test edilmesi ve bakımı daha kolay uygulamalar oluşturmasına yardımcı olurlar.
Bu yazıda bu temel OOP kavramlarını açık ve pratik bir şekilde açıklıyoruz. Sınıfın ne olduğunu, nesnenin ne olduğunu, özelliklerin verileri nasıl sakladığını, yöntemlerin davranışı nasıl tanımladığını ve tüm bu parçaların modern yazılım sistemlerinde birlikte nasıl çalıştığını öğreneceksiniz.
Giriş
Object-Oriented Programming, sıklıkla OOP olarak adlandırılır, yazılımın bir nesneler koleksiyonu olarak modellenmesi fikrine dayanan bir programlama stilidir. Her nesne, kullanıcı, ürün, sipariş, fatura, öğrenci, çalışan, dosya veya hizmet gibi uygulamada anlamlı bir şeyi temsil eder.
OOP, tüm mantığı ayrı işlevler ve değişkenler olarak yazmak yerine, ilgili bilgileri ve eylemleri yapılandırılmış birimler içinde gruplandırır. Bu, kodu daha düzenli hale getirir ve gerçek dünya sistemleri hakkındaki düşüncelerimize daha yakın hale getirir.
OOP'daki en önemli yapı taşları şunlardır:sınıflar,nesneler,özelliklerveyöntemler. Bu kavramları anlamak, kalıtım, kapsülleme, soyutlama, çok biçimlilik, arayüzler ve tasarım desenleri gibi daha ileri konuları öğrenmeden önceki ilk adımdır.
OOP'da Sınıf Nedir?
birsınıfnesneleri oluşturmak için kullanılan bir plan veya şablondur. Bir nesnenin hangi verilere sahip olabileceğini ve hangi eylemleri gerçekleştirebileceğini tanımlar. Sınıfın kendisi gerçek nesne değildir. Bunun yerine gelecekteki nesnelerin izleyeceği yapıyı tanımlar.
Örneğin, bir çevrimiçi mağaza için bir sistem oluşturuyorsak, adında bir sınıf oluşturabiliriz.Ürün. Bu sınıf sistemdeki her ürünün ortak yapısını tanımlayabilir. Her ürünün bir adı, fiyatı, açıklaması, stok miktarı ve indirimleri hesaplama veya stok durumunu kontrol etme yöntemleri olabilir.
Sınıf, geliştiricilerin aynı yapıyı birçok kez tekrar etmekten kaçınmasına yardımcı olur. Her ürün için ayrı değişkenleri manuel olarak oluşturmak yerine, bir sınıf tanımlayıp ondan birçok nesne oluşturuyoruz.
Basit bir ifadeyle, bir sınıf şu soruyu yanıtlıyor:Bu tür bir şey nasıl görünmeli ve ne yapabilir?
Bir Sınıfın Gerçek Dünya Örneği
Öğrencileri bir okul sistemine kaydetmek için kullanılan bir form düşünün. Her öğrencinin adı, yaşı, e-postası, bölümü ve öğrenci numarası gibi benzer bilgileri vardır. Her öğrenciyi ilgisiz veriler olarak ele almak yerine,Öğrencisınıf.
Öğrenci sınıfı tüm öğrencilerin ortak yapısını içerebilir:
Öğrenci adı.
Öğrenci e-postası.
Öğrenci numarası.
Departman adı.
Kayıt durumu.
Aynı sınıf, profil bilgilerinin görüntülenmesi, iletişim bilgilerinin güncellenmesi, derse kaydolma veya öğrencinin aktif olup olmadığının kontrol edilmesi gibi öğrenciyle ilgili eylemleri de içerebilir.
Bu, kodun okunmasını kolaylaştırır çünkü öğrencilerle ilgili her şey tek bir mantıksal yerde gruplandırılmıştır.
OOP'da Nesne Nedir?
birnesnebir sınıftan oluşturulan gerçek bir örnektir. Eğer plan bir sınıfsa, o zaman bir nesne de o plandan oluşturulan gerçek öğedir.
Örneğin,Ürünbir sınıf olabilir, ancak bir dizüstü bilgisayar, telefon, klavye ve monitör bu Ürün sınıfından oluşturulan farklı nesneler olabilir. Her nesne aynı genel yapıya sahiptir ancak farklı değerlere sahip olabilir.
Bir ürün nesnesi “Laptop” ismine ve “1200” fiyatına sahip olabilir. Başka bir ürün nesnesi “Klavye” ismine ve “50” fiyatına sahip olabilir. Her ikisi de aynı sınıftan yaratılmıştır ancak her nesne kendi verilerini depolar.
Basit bir ifadeyle, bir nesne şu soruyu yanıtlıyor:Bu sınıftan oluşturulan asıl öğe nedir?
Sınıf ve Nesne
Bir sınıf ile bir nesne arasındaki fark, Object-Oriented Programming'daki en önemli fikirlerden biridir. Sınıf bir tanımdır, nesne ise bu tanıma dayalı gerçek bir örnektir.
Bu ilişkiyi şöyle düşünebilirsiniz:
Bir sınıf bir ev planı gibidir, bir nesne ise bu plandan inşa edilmiş gerçek bir evdir.
Bir sınıf bir araba tasarımı gibidir, bir nesne ise yoldaki belirli bir arabadır.
Bir sınıf bir kullanıcı şablonu gibidir, bir nesne ise belirli bir kullanıcı hesabıdır.
Bir sınıf bir ürün yapısı gibidir, bir nesne ise mağazadaki gerçek bir üründür.
Bu ayırma, geliştiricilerin yeniden kullanılabilir kod oluşturmasına olanak tanır. Sınıf tanımlandıktan sonra aynı mantığı tekrar yazmaya gerek kalmadan ondan birçok nesne oluşturulabilir.
OOP'daki Özellikler Nelerdir?
Özelliklerbir sınıfa veya nesneye ait değişkenlerdir. Bir nesnenin verilerini veya durumunu saklarlar. Birçok programlama dilinde özelliklere aynı zamanda nitelikler, alanlar veya üye değişkenler de denilebilir.
Örneğin, bir Kullanıcı nesnesi ad, e-posta, parola, rol ve durum gibi özelliklere sahip olabilir. Bir Ürün nesnesi başlık, fiyat, stok, kategori ve görsel gibi özelliklere sahip olabilir.
Özellikler bir nesnenin neye sahip olduğunu tanımlar. Her nesneyi aynı sınıftan oluşturulan başka bir nesneden farklı kılan bilgiyi temsil ederler.
Örneğin, aynı User sınıfından iki kullanıcı oluşturulabilir ancak farklı adlara ve e-postalara sahip olabilirler. Bu değerler nesne özelliklerinin içinde saklanır.
Özellik Örnekleri
Farklı yazılım sistemlerindeki özelliklerin yaygın örnekleri şunlardır:
birKullanıcısınıfın adı, e-postası, şifresi ve rol özellikleri olabilir.
birÜrünsınıf başlık, fiyat, stok ve kategori özelliklerine sahip olabilir.
birSiparişsınıfında sipariş numarası, toplam tutar, ödeme durumu ve teslimat adresi özellikleri bulunabilir.
birBlog Gönderisisınıf başlık, bilgi, içerik, yazar ve yayınlanma tarihi özelliklerine sahip olabilir.
birArabasınıfın marka, model, yıl, renk ve hız özellikleri olabilir.
Bu özellikler nesneyi anlamlı kılar. Özellikler olmadan nesneler mevcut durumlarını temsil edecek bilgiye sahip olamazlar.
OOP'daki Yöntemler Nelerdir?
Yöntemlerbir sınıfa veya nesneye ait olan işlevlerdir. Bir nesnenin neler yapabileceğini tanımlarlar. Özellikler verileri depolarken, yöntemler bu verileri kullanarak eylemler gerçekleştirir.
Örneğin, bir Kullanıcı sınıfının oturum açma, parolayı değiştirme, profili güncelleme veya izinleri kontrol etme yöntemleri olabilir. Bir Ürün sınıfı, indirimi hesaplamak, stokları kontrol etmek veya ürün ayrıntılarını görüntülemek için yöntemlere sahip olabilir.
Yöntemler davranışı ait olduğu verilere yakın tutmaya yardımcı olur. OOP’nin kodu düzenlemeyi kolaylaştırmasının nedenlerinden biri de budur. Uygulamanın her yerine ilgisiz işlevler yazmak yerine, davranışı sorumluluğun sahibi olan sınıfın içine yerleştiririz.
Basit bir ifadeyle yöntemler bir nesnenin neler yapabileceğini tanımlar.
Yöntem Örnekleri
Gerçek uygulamalardaki yöntemlerin yaygın örnekleri şunlardır:
birKullanıcınesne profil bilgilerini güncelleyebilir.
birÜrünnesne indirimden sonraki nihai fiyatı hesaplayabilir.
birSiparişnesne toplam tutarı hesaplayabilir.
birSepetnesne ürün ekleyebilir veya kaldırabilir.
birBlog Gönderisinesne bir URL bilgi notu yayınlayabilir, yayından kaldırabilir veya oluşturabilir.
Yöntemler önemlidir çünkü nesneleri uygulamanın aktif parçaları haline getirirler. Bir nesne yalnızca veriler için bir kap değildir; aynı zamanda bu verilerle ilgili davranışları da sağlayabilir.
Özellikler ve Yöntemler Birlikte Nasıl Çalışır?
Özellikler ve yöntemler, yararlı nesneler oluşturmak için birlikte çalışır. Özellikler nesnenin mevcut durumunu temsil ederken yöntemler bu durumu kullanır veya değiştirir.
Örneğin bir banka hesabı nesnesi hesap numarası ve bakiye gibi özelliklere sahip olabilir. Ayrıca para yatırma, çekme, bakiye alma gibi yöntemleri de olabilir. Bakiye özelliği mevcut tutarı saklarken, yöntemler bu tutarın nasıl değiştiğini kontrol eder.
Bu, değerleri programın herhangi bir yerinden doğrudan değiştirmekten daha iyidir. Yöntemler kuralları ve doğrulamayı içerebilir. Örneğin para çekme yöntemi bakiyenin negatife dönmesini engelleyebilir. Bu, programı daha güvenli ve daha öngörülebilir hale getirir.
İyi tasarlanmış OOP kodunda özellikler ve yöntemler yakından ilişkili olmalıdır. Bir sınıf aynı kavrama ait veri ve davranışları içermelidir.
Basit Örnek: Kullanıcı Sınıfı
Sınıflar, nesneler, özellikler ve yöntemler arasındaki bağlantıyı anlamak için basit bir Kullanıcı sınıfı hayal edin. Sınıf, uygulamadaki kullanıcının genel yapısını tanımlar.
User sınıfı aşağıdaki gibi özellikler içerebilir:
İsim.
E-posta.
Şifre.
Rol.
Durum.
Aynı sınıf aşağıdaki gibi yöntemler içerebilir:
Giriş yap.
Oturumu kapat.
Şifreyi değiştir.
Profili güncelle.
İzni kontrol edin.
Uygulama belirli bir kullanıcı oluşturduğunda bu kullanıcı bir nesne haline gelir. Her kullanıcı nesnesinin kendi özellik değerleri vardır ancak tüm kullanıcı nesneleri, sınıf tarafından tanımlanan aynı yapıyı takip eder.
Basit Örnek: Ürün Sınıfı
Başka bir pratik örnek, bir e-ticaret uygulamasındaki Ürün sınıfıdır. Ürün sınıfı, ürünlerin sistemde nasıl temsil edildiğini tanımlayabilir.
Ürün özellikleri şunları içerebilir:
Ürün adı.
Ürün fiyatı.
Ürün açıklaması.
Stok miktarı.
Kategori.
Ürün yöntemleri şunları içerebilir:
İndirimi hesaplayın.
Kullanılabilirliği kontrol edin.
Stok güncelleyin.
Ürün ayrıntılarını görüntüleyin.
Vergiyi veya nihai fiyatı hesaplayın.
Bu mantığı bir Ürün sınıfı içinde gruplandırarak uygulamanın bakımı kolaylaşır. İndirim mantığı daha sonra değişirse geliştiriciler bunu nerede güncelleyeceklerini bilirler.
Yazılım Geliştirmede Sınıflar Neden Önemlidir?
Sınıflar önemlidir çünkü yazılım projelerine yapı kazandırırlar. Uygulamalar büyüdükçe, her şeyin bağlantısız değişkenler ve işlevler olarak yazılması durumunda kodun yönetilmesi zorlaşabilir.
Sınıflar, geliştiricilerin uygulamayı daha küçük mantıksal parçalara bölmesine yardımcı olur. Her sınıf, kullanıcıların, ürünlerin, siparişlerin, ödemelerin, bildirimlerin veya raporların yönetilmesi gibi belirli bir sorumluluğu temsil edebilir.
Bu düzenleme okunabilirliği artırır ve karışıklığı azaltır. Bir geliştirici bir sınıfı açtığında, sistemin hangi bölümünü temsil ettiğini ve hangi davranışı içerdiğini hızlı bir şekilde anlayabilir.
Yazılım Geliştirmede Nesneler Neden Önemlidir?
Nesneler önemlidir çünkü uygulamanın yeniden kullanılabilir sınıf tanımlarına dayalı olarak gerçek verilerle çalışmasına olanak tanırlar. Bir sınıf yapıyı verir, ancak nesneler programın yürütülmesi sırasında gerçek değerleri taşır.
Örneğin, bir uygulamanın bir User sınıfı olabilir ancak binlerce kullanıcı nesnesi olabilir. Her nesne, benzersiz verilere sahip farklı bir kullanıcı hesabını temsil eder. Bu, OOP'yu birçok benzer varlığı yöneten sistemler için kullanışlı hale getirir.
Nesneler ayrıca geliştiricilerin uygulama davranışını doğal bir şekilde modellemesine de olanak tanır. Geliştiriciler yalnızca prosedürler hakkında düşünmek yerine varlıklar ve onların sorumlulukları hakkında düşünebilir.
Özellikler ve Yöntemler Neden Kod Organizasyonunu Geliştirir?
Özellikler ve yöntemler, ilgili bilgi ve eylemleri bir arada tuttukları için kod organizasyonunu geliştirir. Bu, tekrarlamayı azaltır ve kodun anlaşılmasını kolaylaştırır.
Örneğin ürün fiyatı, indirim ve stok mantığı ilgisiz birçok dosyaya yayılmışsa uygulamanın bakımı zorlaşır. Ancak bu mantık bir Ürün sınıfı içinde düzenlenirse geliştiriciler onu daha kolay bulup güncelleyebilir.
Bu yaklaşım aynı zamanda daha iyi testleri de destekler. Açık özelliklere ve yöntemlere sahip bir sınıf bağımsız olarak test edilebilir; bu da geliştiricilerin hataları daha erken bulmasına ve yazılım kalitesini artırmasına yardımcı olur.
Yeni Başlayanların Yaptığı Yaygın Hatalar
Yeni başlayanlar sınıfları, nesneleri, özellikleri ve yöntemleri öğrenirken sıklıkla bazı yaygın hatalar yaparlar. Bir hata, çok büyük ve çok fazla sorumluluk içeren sınıflar oluşturmaktır. Bir sınıf genellikle net bir kavramı temsil etmelidir.
Diğer bir hata ise tüm özellikleri herkese açık hale getirmek ve programın herhangi bir bölümünün bunları doğrudan değiştirmesine izin vermektir. Bu, nesne durumunu güvensiz hale getirebilir ve kontrol edilmesini zorlaştırabilir. Daha sonra OOP'da kapsülleme gibi kavramlar bu sorunun çözülmesine yardımcı olur.
Yeni başlayanlar aynı zamanda sınıfa ait olmayan yöntemler de oluşturabilirler. Örneğin ödeme mantığı, Sipariş veya Ödeme sınıfına aitse Kullanıcı sınıfının içine yerleştirilmemelidir. İyi OOP tasarımı, sorumlulukların doğru yere yerleştirilmesine bağlıdır.
Sınıflar, Nesneler, Özellikler ve Yöntemler için En İyi Uygulamalar
Daha iyi OOP kodu yazmak için geliştiricilerin basit en iyi uygulamaları izlemesi gerekir. Bir sınıfın net bir amacı olmalı ve adı neyi temsil ettiğini açıklamalıdır. Özellikler nesnenin durumunu tanımlamalı ve yöntemler o nesneyle ilgili eylemleri tanımlamalıdır.
Yararlı en iyi uygulamalar şunları içerir:
Açık ve anlamlı sınıf adları kullanın.
Her sınıfın tek bir ana sorumluluğa odaklanmasını sağlayın.
Yalnızca ilgili verileri depolamak için özellikleri kullanın.
Nesne davranışını korumak ve yönetmek için yöntemler kullanın.
İlgisiz mantıkla çok büyük sınıflar yazmaktan kaçının.
İş kurallarını kontrol ettikleri verilere yakın tutun.
Yöntemler ve özellikler için tutarlı adlandırma kullanın.
Bu uygulamalar kodun okunmasını, güncellenmesini ve gelecekteki projelerde yeniden kullanılmasını kolaylaştırır.
Gerçek Projelerde Sınıflar ve Nesneler
Gerçek yazılım projelerinde sınıflar ve nesneler her yerde kullanılır. Örneğin bir Laravel projesinde Kullanıcı, Posta, Ürün, Sipariş ve Fatura gibi modeller genellikle veritabanı kayıtlarını nesneler olarak temsil eder. Hizmetler iş operasyonlarını temsil edebilir ve kontrolörler kullanıcı isteklerini yerine getirebilir.
Bir Symfony veya Java uygulamasında sınıflar aynı zamanda varlıkları, hizmetleri, depoları, formları, komutları ve sistemin diğer birçok bölümünü düzenlemek için de kullanılır. Bu, OOP’nin yalnızca teorik bir fikir olmadığını gösteriyor. Profesyonel yazılım geliştirmede günlük olarak kullanılır.
Sınıfları, nesneleri, özellikleri ve yöntemleri anlamak, geliştiricilerin çerçeve kodunu okumasına, daha temiz özellikler yazmasına ve tasarım modellerini daha kolay anlamasına yardımcı olur.
OOP ve Design Patterns Arasındaki Bağlantı
Tasarım desenleri, yaygın yazılım tasarım sorunlarına yeniden kullanılabilir çözümlerdir. Çoğu tasarım modeli büyük ölçüde OOP kavramlarına bağlıdır. Fabrika, Singleton, Strateji, Gözlemci, Depo veya Dependency Injection gibi kalıpları öğrenmeden önce geliştiricilerin öncelikle sınıfları ve nesneleri net bir şekilde anlamaları gerekir.
Örneğin Factory Pattern kontrollü bir şekilde nesneler oluşturur. Strategy Pattern, farklı sınıfların farklı davranışları temsil etmesine olanak tanır. Repository Pattern, veritabanı mantığını iş mantığından ayırmak için sıklıkla sınıfları kullanır.
Bu nedenle sınıfları, nesneleri, özellikleri ve yöntemleri öğrenmek, gelişmiş yazılım mimarisini ve tasarım modellerini incelemeden önce önemli bir adımdır.
Sonuç
Sınıflar, nesneler, özellikler ve yöntemler Object-Oriented Programming’in temel yapı taşlarıdır. Bir sınıf yapıyı tanımlar, bir nesne o yapının gerçek bir örneğidir, özellikler nesne verilerini depolar ve yöntemler nesne davranışını tanımlar.
Bu kavramlar geliştiricilerin kodu temiz, yeniden kullanılabilir ve bakımı kolay bir şekilde düzenlemelerine yardımcı olur. Ayrıca yazılım uygulamaları içindeki gerçek dünya sistemlerini modellemeyi de kolaylaştırırlar.
Bu temel bilgileri anlayarak kapsülleme, kalıtım, polimorfizm, soyutlama, arayüzler ve tasarım desenleri gibi daha gelişmiş OOP konularını öğrenmeye hazır olacaksınız. Bu temellere ilişkin güçlü bilgi, profesyonel yazılım sistemleri oluşturmak ve modern programlama dillerinde daha iyi kod yazmak için gereklidir.

