Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-11 Bileşenler, Composer ve JSON

Bu yazı Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-10 Sayfa Düzeni yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bileşen Bir önceki yazıda View yani görünüm sınıfını her türlü şemayı kullanabilecek şekle dönüştürdük ve kullandık. Şimdi teker teker public dizini altında oluşturduğumuz index.html dosyasını parçalayalım ve tema dosyalarına dönüştürelim. Daha önceden oluşturduğumuz Template yani şablon klasöründe tek tek ismini vereceğim dosyaları oluşturun ve kodlarını içine kopyalayın. layout.php: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title><?= $title ?></title> <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> <link rel="stylesheet" href="public/css/universal.css"></head><body><?= $content ?><script src="public/js/main.js"></script></body></html> Bu şablon bi...
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ş-10 Sayfa Düzeni

Bu yazı Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-9 Şablonlar yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Alexey Brodovitch Web sayfalarında veya basılı mecralarda, hiçbir zaman veriyi, yazıyı resmi olduğu gibi okuyucuya sunmuyoruz. İnsanların yazıları rahatça okuyabilmeleri için, ya da web sayfamızda kaybolmadan dolaşabilmeleri için sayfamızdaki verileri, belirli bir düzen kullanarak sayfaya yerleştirmemiz ve biçimlendirmemiz gerekiyor. Burada web tasarımı yapmanın ilkelerine girmeyeceğim, ancak merak ediyorsanız bu konuyu araştırabilirsiniz. Örneğin dümdüz veriyi ekrana bastığımızda, bunlardan bir anlam çıkarmak neredeyse imkansızdır. Arjantin Enflasyon Verisi Bu yüzden bu verileri mesela grafikler kullanarak anlamlı hale getirmeye çalışırız. Arjantin Enflasyon Grafiği Yani amacımız sadece verilerimizin güzel gözükmesi değil, anlaşılabilir olması, uygulamamızın kolay kullanılabilmesi, okunaklı olması, belli amaçlar için aynı veriyi farklı şekilde görüntüleyebilmemiz (yeniden kullanılabilirlik) de aynı zamanda. Sayfa düzeni, vey...
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ş-9 Şablonlar

Bu yazı Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-8 -Web Arayüzü yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bir önceki yazıda View yani görünüm sınıflarından bahsettik ve EntryView adında bir sınıf oluşturduk. Veriyi HTML kodlarıyla render metodunun içinde sardık ve sunumunu yaptık. Şimdi aynı render metodunu bir template yani şablon metodu kullanacak şekilde değiştirelim. <?phpnamespace MidoriKocak;class EntryView{private $entry;public function __construct(EntryInterface $entry = null) {if ($entry !== null) { $this->entry = $entry; } }private function template(EntryInterface $entry) { $title = "<h3>" . $entry->getKey() . "</h3>"; $values = $entry->getValues(); $list = "";foreach ($values as $value) { $list .= "<li>" . $value . "</li>"; } $result = "<p class='entry'>" . $title . "<ol class='values'>" . $list . "</ol>" . "</p>";return $result; }public function setEntry(EntryInterface $entry) { $this->entry = $entry; }public function render() {if (!isset($this->entr...
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ş-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.

Neden kodlama öğrenmeliyim?


Kodlama resim yapmak gibidir demiştim. Bu sorunun da cevabı neden resim yapmayı öğrenmeliyim? Neden bir hobi edinmeliyim? Ya da, şu yaşımdan sonra neden yeni bişiler öğrenmeliyim ki? gibi sorulara verilecek cevaplardan farklı değil aslında ama yine de ben tek tek yanıt vermeye çalışayım.

1. Herkes Programlama öğrenebilir

2011 yılında Machester’da bir yazılım konferansında bize seminer veren konularında baya ağır bilgiye sahip efsane şahıslara “Bu işe neden başladınız?” diye sormuştum. Elemanın biri “Ben Starbucks’ta barista’ydım. (Kahve koyan eleman) Bir arkadaşım bu işten iyi para yapıyordu, ben de merak ettim öğrendim.” diye cevap vermişti. Hala aklıma geldikçe anlatıyorum. Bu eleman şimdi Kanada’nın büyük yazılım şirketlerinden birinde baş yazılımcı. Öğrendiği herşeyi paylaştığı harika bir blogu var. O konferansta ben dahil bir sürü yazılım mühendisi, bu arkadaşın cevabıyla, tabiri caizse göt olmuştuk, hala unutmuyorum. Adam yazılımcı değil, alakası yok ama öğrenmek istiyor, kafaya koyuyor ve alanında en büyük uzman oluyor. Demek ki isteyince herkes programlama öğrenebilir.

2. Çünkü, birşeyler yaratmak en güzel mutluluk kaynağı


Kodlama işi resim yapmak gibi diye ikide birde söylüyorum. Bir kişi hayatı boyunca hiç resim yapmamış da olsa, doğru teknikleri öğrenir ve pratik yaparsa, güzel resimler yapabilir. Bu yüzden yazılarda Bob Ross’un resimlerini kullanıyorum. Başta bomboş tuvali yarım saat arka plan renkleriyle doldurmak, fırçayı tutmak gibi sıkıcı işlerden sonra, doğru teknikleri öğrenerek, “Şuraya minik bir ev yerleştirelim”, “Şuraya ceylanların su içtiği minik bir nehir çizelim” aşamasına geçiliyor. Bu şekilde resim çizmeye başladıktan sonra, bir şeyler yaratmaktan alınan keyif paha biçilemez ve verilen tüm emeklere değiyor. Tabii ki, herkes Rembrandt veya Van Gogh olmak zorunda değil, ama olabilirsiniz de.

3. Kazancı gayet iyi


Gerçekten öğrenmekten ve kendinizi geliştirmekten vazgeçmezseniz, sıralama, arama, veri yapıları gibi temel konuları iyice öğrenirseniz, nesne yönelimli programlamayı uygularsanız programlama işinde çok para var. Özellikle mobil uygulama geliştirme çok revaçta. En kötü mobil uygulama geliştirme işi 10bin euro’lardan başlıyor. Şu linkte maliyetleri hesaplamak için araçlar var. Üstelik freelance, home-ofis, yani 9–6 iş ortamına mahkum olmadan çalışabilme avantajları var. İyi bir çevreniz, alanınızda güzel bir itibarınız (blogunuz, açık kaynaklı yazılımlara katkınız vb.) varsa, yazılımcı kazançları gayet yüksek. Yeter ki, bedavaya çalışmayın. (Not: Bu konuda da bir yazı yazmak lazım.) Özellikle, facebook, google, amazon, microsoft gibi büyük firmalar diploma vb. aramıyorlar. Yukarıda bahsettiğim sıralama ve arama, veri yapıları gibi temel konuları çok iyi bildiğinizde çok iyi maaşla, vize desteğiyle sizi transfer etmek için yarışıyorlar. (Bu konuda hackerrank sitesini öneririm.)

4. Kimse sizi kandıramaz

Çaresiz yönetici kadrosu

Kodlama bilen kişilerde gördüğüm en büyük gıcıklık bilgilerini paylaşmaktan kaçmaları. Bunun egoistlik, iş kaybetme korkusu gibi saçma sapan sebepleri olabilir. Hatta bazı kodcuları evimin kapısından içeri sokmam. Soruna cevap vermez, günaydın demez, bilerek yanlış bilgi verir, kötü rekabet eder vb. Çoğu yalan söyler. Örneğin yazılımla uğraşan bir şirkette yönetici ekipteyseniz, kodcularla uğraşmak baş ağrıtabilir. Bu absürd, gelişmemiş insan türüne muhtaç olmamak için ve “memory çok şişti, ondan hata oldu, bug çıktı” gibi yalanlara aldanmamak “E adam gibi veri yapısı oturtaydın” diye cevabı yapıştırmak için temel de olsa kodlama öğrenmekte yarar var.

5. Çılgın paralar dökmeye gerek yok. El kadar bilgisayar yeter


Kodlama yapmak için 35$’lık Raspberry Pi bilgisayar yeter. Öyle ahım şahım bilgisayarlara deli paralar akıtmanıza gerek yok. Hatta bilgisayarın kaynakları kısıtlı olduğunda yapacağınız yazılımın performansına da dikkat etmiş olursunuz ki, bu da sizin diğer kodculardan ayrılmanızı sağlar. İhtiyaç duyacağınız bir çok araç, açık kaynaklı yazılım geliştirdiğinizde ücretsizdir. İnternette dünya kadar kaynak ücretsiz bir şekilde önünüze serilmiş vaziyettedir. BilgeAdam vb. gibi dershane usülü eğitim veren ticari kurumları tavsiye etmiyorum. Bunun yerine, youtube üzerinden videolu anlatımlar, piyasada insan gibi konuşan, dilinden kolayca anlayacağınız kitaplar mevcut. (Mesela benim kitabım, di mi ama?) İngilizceniz de varsa, ki kesinlikle olmalı, internette istediğiniz teknolojiyi öğrenmek için ulaşamayacağınız kaynak yok. Tüm insanlığın bilgisi elinizin altında. Kodlama yapmak, hali hazırda bir sanat olduğu, standartları tam oturmadığı için, alanda çalışmak için bir diplomaya sahip olmak zorunda da değilsiniz. Mesela, diş hekimliği fakültesi olmadan diş çekemezsiniz, ya da makine mühendisi değilseniz, doğalgaz tesisatı kuramazsınız, ancak böyle kısıtlamalar kodlama alanında yok. Bu aslında, biz bilgisayar, yazılım mühendisleri için kötü bir durum. Ancak bilgisayar bilimleri şunun şurasında 50 yıllık bir bilim dalı olduğu, ve halen bilimsel standartları oturmadığı için, sanat dalı olarak düşünülebildiği için, kodlama sanatını iyi bilen birisi gayet bu alanda profesyonelce çalışabilir.

Sonuç


Sonuç olarak, yeni şeyler öğrenmekten keyif alıyorsanız, bir şeyler yaratmak hoşunuza gidiyorsa, yeni bir meslek edinmeye ve bu alanda çalışma ve para kazanma olanakları size cazip geliyorsa kesinlikle ama kesinlikle kodlama öğrenmelisiniz.


Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/midorikocak.pdf 
Websitem:
http://mtkocak.net