Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-7 —Sınıfları Kullanmak ve API meselesi

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-6 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bu yazıya kadar, bir programı sınıflar kullanarak nasıl tasarlayacağımızı, nasıl temiz kod yazacağımızı, kodlarımızı nasıl hatalara karşı kontrol edeceğimizi, sınıflarımızın sorumluluklarının ne olacağını anlattık. Peki programımızı kim nasıl kullanacak? Sınıflarımızı yazdık ve app.php dosyası içinde de kullandık, ama son kullanıcı bu programı nasıl kullanacak? Bu yazıda bu konuyu detaylıca işleyeceğiz. Ayrıca programımıza arama, sıralama, üyelik gibi ek özellikler eklemek istediğimizde ne yapacağız? Bu meseleye de bu yazıda kısaca değineceğiz. Kullanıcılar Genel olarak programların amacı Bu konuyu bu seride defalarca açıklamıştık ancak şimdi tıpkı başta sınıflarımızı tasarladığımızda yaptığımız gibi, programımızın nasıl çalışacağını ve amaçlarının ne olduğunu kısaca anlamamız gerekiyor ki, sınıflarımızı kullanacak program kodumuzu da nesne yönelimli bir şekilde tasarlayabilelim. Genellikle programların amacı kullanı...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-6— Girdi Sınıfı

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-5 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bir önceki yazıda girdi sınıfımızı kullanan sözlük sınıfımızı yazdık. Deneme/Yanılma yani Try/Catch bloklarını kullanarak hatalara dayanıklı kod yazmayı ve kod tekrarlarını önlemekten bahsettik. Bu yazıda Entry yani girdi sınıfımızı oluşturacağız. Sözlük girdisi Dictionary.php sınıfımızın bulunduğu dizinde Entry.php adlı bir dosya oluşturalım. Artık bir sınıfın aşağı yukarı nasıl olması gerektiğini biliyorsunuz. İçi boş sınıfımızı şu şekilde yazalım. <?phpnamespace MidoriKocak;class Entry implements EntryInterface{public function __construct(){}public function setKey(string $key){}public function getKey(): string{}public function setValues(array $values){}public function getValues(): array{}public function getValue(int $order): string{}public function setValue(int $order, string $newValue){}public function addValue(string $value){}public function deleteValue(int $order){}} Her sınıfın __construct metodu olması ger...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-5 — Sınıfı inşa etmek

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-4 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Önceki yazılarda nesne yönelimli programlama mantığını, sınıflarımızı nasıl oluşturacağımızı, tek sorumluluk prensibini, bilgi gizlemeyi, sihirli yaratıcı metotları kavramaya çalıştık. Bir önceki yazıda sadece metot isimlerini içeren arayüzler yani interface’ler yazdık. Önümüzde iki yol var: Harala gürele kullanıcıyı düşünmeden sınıfların içlerini doldurmaya başlamak. Ya da bu sınıfları kullanacak uygulamayı yazmak. Yani bu sınıfları uygulamayı yazarken test etmek ve çıkabilecek hatalara önceden önlem almak. Biz arayüz yazdığımız için kullanıcının kullanacağı kodları zaten belirtmiş olduk. PHP’de test konusuna bu yazıda basitçe değineceğim. Çünkü kodumuzu insanlar kullanacak. Daha sonra phpUnit konusuna geldiğimizde detaylıca anlatacağım da. Bu insanların neye ihtiyaçları olduğunu, neler yapabileceklerini az çok tahmin edebiliyorsak, sınıflarımızın içlerini bu kullanıcıların yapacakları hatalara karşı dayanıklı bir ş...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-4

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-3 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bir önceki iki yazıda şu soruları sormuş ve kısmen cevap vermiştik: Eklemek istediğimiz başlık sözlükte yoksa ve çağırdıysak bu sorunu bildirim göstermeden nasıl hallederiz? Başlık zaten varsa ve değiştirmek istemiyorsak, aynı başlığa yeni bir açıklama değerini nasıl ekleriz? Bir başlığı silmek ya da düzenlemek istediğimizde ve başlıkta birden fazla açıklama varsa, tüm açıklamalara mı etki edeceğiz yoksa sadece birine mi? Bir başlığa, tarih bilgisini nasıl girebiliriz? Bu tarih bilgisine dayanarak nasıl sıralama işlemi yapabiliriz? Arama, filtreleme işlerini nasıl yapacağız? Önce, bir önceki yazıda spagetti usulüyle bir takım değişiklikler yapmıştık. Bu değişiklikleri Dictionary.php dosyasındaki sınıfa taşıyarak işe başlayabiliriz. Dictionary.php dosyamızın içine şu metodu ekleyelim: public function getEntry(string $key): string{if (array_key_exists($key, $this->entries)) {return $this->entries[$key]; }} 2. sor...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-3

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-2 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Nasıl kullanacağımızı şekliyle anlayan bir nesne Nesneyi Kullanmak ve Arayüz Kavramı Daha önce information hiding, yani bilgi gizleme kavramından bahsederken şöyle demiştik: araba kullanırken, motorun, katalitik konvertörün, alternatörün o anda ne yaptığı ile ilgilenmiyoruz. Araç kullanıcısı olarak bizim amacımız bir yerden bir yere gitmek, ve bunu aracın direksiyonunu, vitesini, pedallarını vb. kullanarak gerçekleştiriyoruz. Eğer araba kullanmayı biliyorsak, her türlü arabayı kullanabiliriz. Çünkü otomobiller üretilirken belirli standartlara uyularak üretilmekte. Çok fütüristik değilse, bir aracın, direksiyonunun, vitesliyse debriyajının gaz pedalının, sinyal kolunun vb. olduğunu önceden tahmin ediyoruz, çünkü daha önce sürücü kursunda öğrendiğimiz ve hayatımızda gördüğümüz tüm otomobillerden edindiğimiz tecrübe bilgisiyle böyle bir beklenti oluşturduk. Bu ne ki şimdi? Yani mesela bir otomobilde, vites sağ alt köşe...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-2

Sınıf Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Önceki yazıda, nesne yönelimli programlama mantığını anlamaya çalıştık. Özetlemek gerekirse kabaca şunları anlatmıştım; Nesne kelimesinin ne anlama geldiğini Felsefi, fiziksel, psikolojik ve dilbilimsel yönleri de olduğunu Programlamada nesne kavramının ne ifade ettiğini Neden nesne yönelimli programlama öğrenmemiz gerektiğini Nesnelerin birbirleriyle ilişkilerini Şimdi kavramları anlatmaya ve örnekler vermeye devam edeceğim. Tüm yazılarımda olduğu gibi kavramları kuru kuruya ve salakça tanımlar vermek yerine, işe yarar, elle tutulur örneklerle mantığı okuyucunun kafasında oturtmaya çalışıyorum. Bazen yazılarımın dili laubali olabilir, ama yazının eğlenceli ve anlaşılabilir olması, bence ciddi olmasından daha avantajlı. Ben çeşmeden kana kana su içmeyi çok severim mesela. Hayatta herşeyi yaparken bir amacımız var, örneğin su içerken amacımız susuzluk hissimizi gidermek. Bu işi yaparken de belli başlı yöntemler ku...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.