PHP ile OOP KODCU.com

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "PHP ile OOP KODCU.com"

Transkript

1 PHP ile OOP KODCU.com Makalelerin sahibi: Altuğ Bilgin Altıntaş PDF i düzenleyen: Zafer Latif

2 PHP de Sınıf/Class yapısı ve NYP-1 Java, C++ vb bir dille kod geliştirmiş okuyucu PHP de sınıf/class yapısı ve NYP-1 başlığını gördüğünde, bu yazının aslında PHP ile OOP (Object Oriented Programming) yani nesne yönelimli programlama (yazının devamında buna kısaca NYP diyeceğiz) konusunu ele aldığını anlayacak ve belki PHP nin bu yönü ile ilk kez tanışacak ve şaşıracaktır Evet, PHP ile de yukarıda andığım diller ve benzerleri gibi NYP gerçekleştirilebilir ve bu gerçekleştirme en az söz konusu dillerdeki kadar esnek ve neredeyse onlarda olduğu kadar sonuca götürür(özellikle PHP 5 den sonra) mahiyette olabilir/oluyor. NYP kavramı ile ilk kez karşılaşıyorsanız buda ne? demeniz olası. NYP kısaca adından da anlaşılacağı üzere, geliştirilen kodu nesneler üzerine bina etme anlayışı/yaklaşımıdırve oldukça faydalıdır. NYP için anlayış/yaklaşım tabirini kullandım, buradan NYP bir nevi yiğidin yoğurt yeme biçimi mi? sorusu akla gelebilir ve bu soruya rahatlıkla Evet cevabını verebiliriz. NYP ile geliştirilmiş bir kodun yerine getirdiği işlevi, NYP gözardı edilerek, yapısal bir dil ile(yani farklı bir anlayış/yaklaşım ile) de gerçekleştirmek pekala mümkündür. Burada sözü fazla uzatmadan sizleri, yapısal programlama ve nesne yönelimli programlamaya dair giriş seviyesinde bilgi ve kavramları bulabileceğiniz iki wiki adresine yönlendirip, örneklerle PHP de sınıf/class yapısı ve NYP konusuna giriş yapmak istiyorum. Yapısal Programlama ( Ek-1 ) Nesne Yönelimli Programlama ( Ek- 2 ) Nesnelerle çalışmak Konuyu, kod örnekleri ile işlemeye başlamadan önce bir geliştirme senaryosuna ihtiyacımız olduğunu belirtmeliyim. Bu senaryo ihtiyacını, daha önceki yazılarımızda da kullandığımız kodcu.com makaleleri örneğinden karşılayabiliriz, tabi bunu biraz geliştirerek. Senaryomuz kabaca şöyle: Kodcu.com da yer alan makaleleri, kategori-baslik yazar- yayın tarihi bilgisi ile depolayıp, çağırdığımızda çıktılayacak bir kod geliştirmek. 1. class makaleler { var $kategori; 4. var $baslik; 5. var $yazar; 6. var $yayin_tarihi; function construct ($kategori, $baslik, $yazar, $yayin_tarihi) { $this -> kategori = $kategori; 12. $this -> baslik = $baslik; 13. $this -> yazar = $yazar; 14. $this -> yayin_tarihi = $yayin_tarihi; 15. } } Yukarıda gördüğünüz kod parçası, yazının girişinde bahsettiğim dillere aşina olanlar için son derece tanıdık gelecektir, zira NYP mantığı küçük syntax/söz dizimi farkları müstesna aynıdır.

3 Kodumuzda, işe öncelikle bir sınıf/class deklerasyonu ile başladığımız görülüyor. Amacımıza uygun olarak, kodcu.com da yayınlacak makaleleri temsil edecek nesnemiz class makaleler ile başlayıp, süslü parantezlerin içine aldığı kod bloğudur. Bir başka değiş ile kod içinde her bir makaleyi nesneleştirecek araç bu sınıf/class ımızdır. Kodumuzda var anahtarı ile başlayan satırlarda tanımlananlar değişkenlerdir, function ile başlayan satırda ise sınıfımızı işlevsel hale getirecek metodumuzu deklare ediyoruz. Sınıflarda yer alan değişkenlere özellik/attribute, fonksiyonlara ise metod/method denir. İsmini makaleler olarak belirlediğimiz sınıfımızın içinde yer alan metodun construct adında olması dikkatinizi çekmiştir. Bu adlandırmadan da anlayabileceğiniz gibi, söz konusu metod sınıf/nesnemizin yapılandırıcısıdır. Yapılandırıcı kısaca, sınıf/nesne nin örneği oluşturulduğunda ilk çağrılan ve çalıştırılan, bu özelliği gereği istendiğinde nesne özelliklerini ilk kullanıma hazırlayan ve varsa yapılması arzulanan diğer işlemleri gerçekleştirdiğimiz metottur. PHP sınıfları, temelde değişken örüntülerinden oluşan veri türleridir ve yapılandırıcı metodlar ile, sınıf/nesne içinde tanımlayabileceğimiz diğer metodları işlevsel kılan şey, tamda sınıfların bu mahiyeti ile söz konusu metodların sınıf değişkenlerine erişim özelliğidir. Tam bu noktada, metodumuzun parametre olarak, sınıf içinde deklare ettiğimiz değişken/özelliklerle aynı isimde(siz arzu ederseniz farklı isimler kullanabilirsiniz, bu tamamen sizin tercihinize ve kod yazım tekniğinize bağlıdır) değerler aldığını ve içinde, gelen bu değerleri sınıf değişkenleri/özelliklerine atadığını/set ettiğini görüyoruz. 1. $this -> kategori = $kategori; Burada gördüğünüz this anahtarı ile sınıf özelliğine erişiyor( $ sembolünün kullanılmadığına dikkat edin) ve yapılandırıcı fonksiyonun parametre olarak aldığı değeri, sınıf özelliğine set ediyoruz. Kabaca makale nesnemizi tanıdığımıza göre, şimdi bu nesneyi nasıl kullanacağımıza, bir başka değiş ile onu nasıl oluşturacağımıza, veri/değer atayıp okuyacağımıza, değiştireceğimize gelelim. 1. $yeni_yazi = new makaleler("php", "PHP'ye Giriş", "Hüseyin Akdoğan", " "); Tek satırlık kodu inceleyelim. Öncelikle yeni_yazi isminde bir değişkene new anahtarı ile makale sınıfı/nesnesinin bir örneğinin atandığını görüyoruz. Evet, PHP de bir sınıf örneği yani bir nesne, new anahtarı ile yukarıda gördüğünüz şekilde oluşturulur. Sonrasında ise, makaleler nesnemizin yapılandırıcı metodunun aldığı parametre sayısınca değerin, parantez içine alındığını görüyoruz. Buradan da anlayacağınız gibi, aslında yaptığımız şey, makaleler nesnesinin yapılandırıcısını çağırmaktır. Bir başka değiş ile, new anahtarı ile yeni bir örneği oluşturulan nesnenin yapılandırıcı metodu var ise, PHP yorumlayıcı/çözümleyicisi bu aşamada onu çağıracak ve çalıştıracaktır. Bizim metodumuz parametre aldığı için kod yukarıdaki gibi oldu, eğer parametre almayan bir yapılandırıcı söz konusu olsaydı kodumuz şu şekilde olacaktı. 1. class makaleler { function construct() { 4. echo "Nesne oluşturuldu "; 5. } 6. } $yeni_yazi = new makaleler;

4 Bu kodun çıktısı Nesne oluşturuldu olacaktır. Şimdi bir önceki kodumuza dönüp, incelememize devam edelim. Daha öncede söylediğim gibi, söz konusu yapılandırıcı metod, aldığı değerleri sınıf özelliklerine set ediyordu. Bu durumda gerçekleşen işlemin ne olduğunu, aşağıdaki kodun çıktısı bize söyleyecektir. 1. echo $yeni_yazi->kategori; 2. echo $yeni_yazi->baslik; 3. echo $yeni_yazi->yazar; 4. echo $yeni_yazi->yayin_tarihi; PHP PHP ye Giriş Hüseyin Akdoğan Şimdi tekrar olana zoom yapalım. Kodumuzda echo ile, yeni_yazi değişkeni üzerinden, makale sınıfı/nesnesinin özelliklerini, daha doğru bir ifade ile, yeni/new bir örneğini oluşturup, yapılandırıcı metodu ile değer ataması yaptığımız ve yeni_yazi değişkenine atadığımız makale sınıfı/nesnesi türündeki(hatırlayalım, sınıflar değişken örüntülerinden oluşan veri türleri idi) verileri çıktılıyoruz. Bunu yaparken -> anahtarını kullanıyoruz. Buradan da anlayabileceğiniz gibi -> anahtarı, sınıf değişken/özellikleri ve fonksiyon/metodlarına erişim için kullanılmaktadır. Aynı yöntemle, makale sınıfı/nesnesi özelliklerinin sakladığı değerleri değiştirmemiz de mümkündür. Yani sınıf/nesne özelliklerine salt yapılandırıcı/constructor içinde değer atamıyor, eğer değişken deklare edilirken private,protected olarak tanımlanmamış ise(public, private ve protected erişim belirteçleri PHP 5 ile gelmiştir), kod içinde bu özelliklere yeni değerler set edebiliyoruz. 1. class makaleler { var $kategori; 4. var $baslik; 5. private $yazar; //bu değişken/özelliğe sınıf dışından değer atayamayız. 6. public $yayin_tarihi; function yenimetod($kategori, $baslik, $yazar, $yayin_tarihi){ $this -> kategori = $kategori; 11. $this -> baslik = $baslik; 12. $this -> yazar = $yazar; 13. $this -> yayin_tarihi = $yayin_tarihi; } 16. } $yeni_yazi = new makaleler; 19. $yeni_yazi -> yenimetod("php", "PHP'de sınıf/class yapısı ve NYP- 1", "Hüseyin Akdoğan", " "); $yeni_yazi->yayin_tarihi = " "; 22. //Artık yayin_tarihi değişken/özelliğinin sakladığı değer değil echo $yeni_yazi->yazar = "Ahmet oğlu Mehmet"; 25. //Bu satır error verecektir çünkü makaleler sınıfı/nesnesinin 26. //yazar isimli değişken/özelliği private olarak deklare edilmiştir

5 Burada öncelikle sınıf/nesne içinde yer alan yapılandırıcı/constructor metodumuz yerine yenimetod adında yeni bir metod deklare ettiğimiz dikkatinizi çekmiştir. Bu metod ile yapılandırıcı/constructor metodu ayıran temel fark, yapılandırıcı/constructor metodunun nesne new anahtarı ile oluşturulduğu anda çağrılmasıdır. Yani yenimetod metodu, makaleler nesnesinin yeni bir örneği oluşturulduğu anda çağrılmayacaktır. Bu metodun nerede nasıl çağrıldığını 1. $yeni_yazi -> yenimetod("php", "PHP de sınıf/class yapısı ve NYP- 1", "Hüseyin Akdoğan", " "); yukardaki satırda görüyoruz. İlgili satırı incelediğimizde, kendisine makale sınıfının/nesnesinin bir yeni/new örneğiatanmış yeni_yazi değişkeninin, makale sınıfı/nesnesinin yenimetod metodunu -> anahtarı ile çağırdığını ve bu metoda aldığı parametre sayısınca, parametre geçirdiğini görüyoruz. Bu metod da, aldığı değerleri sınıf özelliklerine set ediyor. Bu örnek size, nesneler içinde yer alan metodların, nesneleri işlevselleştirme gücüne dair fikir verebilir. Dışarıdan erişime kapattığınız değişkenlerinize nesne içinde değer atama, değiştirme ve okuma gibi işlemlerde, bu kullanımın yararları ortadadır. Kodumuzu incelemeye devam edelim 1. $yeni_yazi->yayin_tarihi = " "; Bu satırda, yayin_tarihi değişken/özelliğinin sakladığı değerini, ile değiştiriyoruz. Bir sonraki satırda ise aynı yöntemle yazar özelliğinin değerini değiştirmeye çalışıyoruz. 1. echo $yeni_yazi->yazar = "Ahmet oğlu Mehmet"; Ancak başarılı olamıyoruz, çünkü makaleler sınıfı/nesnesinin yazar isimli değişken/özelliği private olarak deklare edilmiştir, dolayısıyla çalışma zamanında bu satır error verecektir. Peki, gerek gördüğümüzde private erişim belirtecine sahip nesne özelliklerine nasıl erişir ve değer ataması yapabiliriz? Bu sorunun cevabı, sınıf/nesnelerimizi işlevsel hale getirdiğini daha önce belirttiğimiz metodlar ve kullanımlarındadır. İzin verirseniz, gerek bahsettiğim bu tür durumlara dair kullanım örnekleri ve gerek, NYP söz konusu olduğunda bahsedilmemesi tuhaf kaçacak kalıtım konusunu bir sonraki yazıya bırakalım.

6 PHP de Sınıf/Class yapısı ve NYP-2 Bir önceki yazımızda son olarak, PHP sınıfları içinde public erişim belirtecine sahip olmayan nesne özelliklerine gerek gördüğümüzde nasıl erişir, değer ataması yapabilir ve değer okuyabiliriz sorusunda kalmıştık. O yazıda da belirttiğim gibi bu sorunun cevabı, sınıf/nesnelerimizi işlevsel hale getirdiğini daha önce belirttiğimiz metodlar ve kullanımlarındadır. Birazdan örneklendireceğimiz kullanım, bir NYP kavramı olan sarmalama/encapsulation dır. Sarmalama, kısaca özellik/metodların erişim yapısının belirlenmesidir. Örneğimizde yazar özelliğini, erişimin sadece sınıf içinden sağlanması adına private erişim belirteci ile deklare ettik. Ancak aynı değişkene kodun akışı içinde gerekli olduğunda okumak ve yeni değer atamak için erişmemiz gerekiyor. Bu sorunu, söz konusu değişkene erişimi sağlayacak işlevsel metodlarla aşacağız. Örnek kod üzerinden irdeleyelim. 1. class makaleler { 2. var $kategori; 3. var $baslik; 4. private $yazar; 5. public $yayin_tarihi; 6. function yenimetod($kategori, $baslik, $yazar, $yayin_tarihi){ 7. $this -> kategori = $kategori; 8. $this -> baslik = $baslik; 9. $this -> yazar = $yazar; 10. $this -> yayin_tarihi = $yayin_tarihi; 11. } 12. /*yazar değişkenine 13. değer atamak için 14. kullanacağımız metod 15. */ 16. function setyazar($yazar){ 17. $this -> yazar = $yazar; 18. } } 21. $yeni_yazi = new makaleler; 22. $yeni_yazi -> yenimetod("php", "PHP'de sınıf/class yapısı ve NYP- 2", "Hüseyin Akdoğan", " "); $yeni_yazi->setyazar = "Ahmet oğlu Mehmet"; 25. } Kodda setyazar isimli metod dikkatinizi çekmiştir, işte private erişim belirtecine sahip nesne özelliğine değer atamak için kullanacağımız metod bu metottur çünkü söz konusu özelliğe sınıf dışından değer atayamıyor ve okuyamıyoruz. Değer atamasını yaptığımız satıra baktığımızda, işleyişin daha önce örneklerini gördüğüklerimizden hiçbir farkı bulunmadığını görürüz. 1. $yeni_yazi->setyazar("ahmet oğlu Mehmet"); Bu aşamadan sonra, yeni_yazi değişkeninin bir örneğine sahip olduğu makale nesnesinin yazar özelliği Ahmet oğlu Mehmet değerini taşıyacaktır. Bu değeri okumak içinde aynı yönteme başvuracağız çünkü erişmeye çalışacağımız özellik private erişim belirtecine sahip olduğundan echo $yeni_yazi->yazar; şeklinde bir kullanım söz konusu olamayacaktır. 1. function getyazar(){ 2. return $this -> yazar; 3. }

7 1. echo $yeni_yazi->getyazar(); Ahmet oğlu Mehmet Bu örneklerden hareketle, metodların sınıflarımız üzerinde bize sağladığı kontrol gücü hakkında bir fikir edinebildiğinizi umuyorum. Bu kontrol gücü bize aynı zamanda işlevsellik noktasında da fikir vermektedir. Tekrar belirtmeliyim ki örneklendirdiğimiz şey, bir NYP kavramı olan sarmalama/encapsulation dır. Yukarıda söylediğimiz gibi bu kavram, kısaca özellik/metodların erişim yapısının belirlenmesini ifade etmektedir. Örneğimizde, yazar özelliğini private erişim belirteci ile deklare ederek, bu özelliğe sınıf dışından erişimi engelledik ve söz konusu özelliğin okunması ve değer ataması için 2 ayrı metod kullandık, yani onu sarmaladık. Kalıtım/Inheritance Bir başka NYP kavramı olan kalıtım kısaca, bir sınıfın bir başka sınıftan türemesidir. Bu türemiş sınıf, kendisinden türediği sınıftan özellik ve metodları miras almaktadır ki, kalıtım konusunda en önemli kavram, bu miras kavramıdır. Konuyu kavramak için yine bir örneğe müracat edelim. 1. class uni { 2. var $adi = "Kodcu.Com Yazılım Üniversitesi"; 3. var $mekan = "Sanal Alem"; } class fakulte extends uni { var $bolumadi; function construct($bolumadi){ 12. $this -> bolumadi = $bolumadi; 13. } 14. } $bolum = new fakulte("yazılım Mühendisliği"); 17. echo "Okulu: ".$bolum->adi." Fakültesi: ".$bolum->bolumadi. " Mekan: ".$bolum- >mekan; Kodu hızlıca incelediğimizde, uni ve fakulte adında 2 ayrı sınıfımız olup, fakulte sınıfının extends anahtarı ile oluşturulduğunu göreceğiz. 1. class fakulte extends uni Buradan da anlayabileceğiniz gibi, bir sınıf bir başka sınıftan türetildiğinde bu extendsanahtar sözcüğü ile yukarıda görüldüğü gibi yapılmaktadır. Uni sınıfı/nesnesi içinde her hangi bir metod olmamakla birlikte iki özelliğin deklare edilip, değer ataması yapıldığını görüyoruz. Fakulte sınıfı/nesnesi içinde ise bolumadi adında tek bir özellik ile bir yapılandırıcı metodumuz bulunduğunu ve bu metod içinde, metoda geçirilen değerin sınıf/nesne özelliğine atandığı/set edildiğini görüyoruz. Kodumuzda kalıtım ve miras konusu için aydınlatıcı satır 1. echo "Okulu: ".$bolum->adi." Fakültesi: ".$bolum->bolumadi. " Mekan: ".$bolum- >mekan;

8 yukarıdaki satırdır. Bu satırda $bolum->adi ve $bolum->mekan şeklinde, aslında fakulte sınıfı/nesnesi içinde tanımlamadığımız özelliklere erişmeye çalışıyoruz. Kodumuzu çalıştırdığımızda bizi aşağıdaki çıktı karşılayacaktır. Okulu: Kodcu.Com Yazılım Üniversitesi Fakültesi: Yazılım Mühendisliği Mekan: Sanal Alem $bolum->adi ve $bolum->mekan ile eriştiğimizi yukarıdaki çıktıda gördüğümüz özellikler, uni sınıfı/nesnesinin adi ve mekan özellikleridir. İşte kalıtım ve miras tam da burada gördüğümüz gibi, fakulte sınıfı/nesnesinin, kendisinden türediği uni sınıfı/nesnesi içinde yer alan bu iki özelliği miras almasıdır. Bir başka değiş ile, türetilen sınıflar, kendilerinden türedikleri sınıfların özellik ve metodlarını miras alırlar. Bir başka örnek. 1. class uni { 2. var $adi = "Kodcu.Com Yazılım Üniversitesi"; 3. var $mekan = "Sanal Alem"; } class fakulte extends uni { var $bolumadi="yazılım Mühendisliği"; function info(){ 12. echo "Fakulte sınıfının içindeyiz..."; 13. } 14. } class ogrenci extends fakulte{ var $ogrenci_kimligi; function construct($ogrenci_kimligi){ 21. $this -> ogrenci_kimligi = $ogrenci_kimligi; 22. } } $ogrenci = new ogrenci("hüseyin Akdoğan"); 27. $ogrenci->info(); Bir önceki örneğimizi biraz değiştirerek oluşturduğumuz kodda, fakulte sınıfına info isimli bir metod eklediğimizi ve aynı sınıftan ogrenci adında bir sınıf türettiğimizi görüyoruz. 1. $ogrenci->info(); Bu satırda ise, ogrenci sınıfının kendisinden türediği fakulte sınıfının info isimli metodunun çağrıldığını görüyoruz. Kodumuzu çalıştırdığımda karşılaşacağımız çıktı Fakulte sınıfının içindeyiz olacaktır. Buradan da, yukarıda söylediğimiz gibi türetilen sınıfların, kendilerinden türedikleri sınıfların özellikleri yanı sıra metodlarını da miras aldıklarını görüyoruz.

9 Bu ve bir önceki yazımızda kurgulamaya çalıştığımız nesne modellerinin, çok boyutlu ve özellikle veritabanı ile etkileşimli bir kayıt sisteminde, kodlayıcıya sağladığı avantajlar tartışılmazdır. NYP yaklaşımının, programlayıcıya sağladığı avantajları kısaca saymamız gerekirse bunları şu şekilde özetleyebiliriz. NYP yaklaşımı, tasarlanacak kod ile gerçek yaşam arasında akli bir bağ kurarak, tutarlı ve sağlam modellemeler kurulmasını kolaylaştırmaktadır. NYP yaklaşımı ile değişken ve metod/fonksiyonlar arası ilişkiler, tasarlanan nesnenin depolama özelliğine yüklenmiş ve programcı bu ilişkiler yükünden kurtulmuştur. NYP yaklaşımında kalıtım sayesinde, geliştirilen kod farklı amaçlar için genişletilebilmekte, ek özellikler alabilmekte ve bu kodun ana iskeletini bozmadan/değiştirmeden gerçekleştirilebilmektedir. NYP yaklaşımında yazılan kodun okunabilirlik ve anlaşılabilirlik oranı yükselmekte, buda özellikle ekip çalışması ile geliştirilen kod geliştirme süreçlerine ciddi katkı sağlamaktadır. PHP ile NYP konusunu işlemeye devam edeceğiz. Not: PHP de fonksiyonların yapı ve kullanımı, son iki yazımızda gördüğünüz metod ve kullanımları(yapılandırıcı/construct metodların çalışma prensibi hariç) ile aynıdır. Dikkatinizi çekmiştir ki, sınıflar içinde yer alan metodlar function anahtarı ile deklare edilmektedir. Bir başka değiş ile, fonskiyonlar sınıflar içinde yer aldığında metod olarak adlandırılmaktadır.

10 PHP de Sınıf/Class yapısı ve NYP-3 PHP ile NYP konusuna devam ediyoruz. Bu yazımızda amacımız, NYP çerçevesinde geçmiş iki yazıda değinsek de, yazıların hacmini artırmamak adına detaylarını ihmal ettiğimiz konuları tamamlamak ve böylece bir sonraki yazıda, şu ana kadar ele almadığımız NYP konu/kavramlarına geçmek. Bu bağlamda daha önce değindiğimiz erişim belirteçleri (yine daha önce değindiğimiz sarmalama /encapsulation ile ilişkisi sebebi ile) ve metodlar hakkında, yazı hacmi sebebi ile söz etme fırsatı doğmayan hususlara değinmek istiyorum. Erişim belirteçleri Konuya girerken, sınıf/nesne özellikleri için söylediğimiz şeylerin, sınıf/nesne metodları için de geçerli olduğunun altını çizmek istiyorum. PHP de sınıflarımız içinde, deklare edeceğimiz özellik ve metodlar için kullanabileceğimiz erişim belirteçleri şunlardır. Public Protected Private Public(ve PHP 4 den miras aynı işlevi görecek var) erişim belirteçine sahip sınıf/nesne özelliklerine, sınıf/nesnelerin dışından da erişim mümkündür, buna dair kod örnekleri önceki yazılarımızda yer almıştı. Protected erişim belirteçine sahip sınıf/nesne özelliklerine, sınıf/nesne dışından erişmek mümkün değildir. Erişim ihtiyacı için sarmalama yöntemine başvurmamız gerekmektedir.protected olarak declare edilmiş sınıf/nesne özellikleri, kalıtım yolu ile alt sınıf/nesnelere aktarılabilir. Ağağıdaki örneği inceleyelim. 1. class Personel { public $Firma = "Kodcu A.Ş"; 4. public $Adres = "İstanbul/Türkiye"; 5. protected $TicSicilNO = "123456"; 6. protected $NaceKod = "855903"; } class Isci extends Personel { public $Adi; 13. function construct($adi){ 14. $this -> Adi = $Adi; 15. } function getticsicilno(){ 18. return $this->ticsicilno; 19. } function getnacekod(){ 22. return $this->nacekod; 23. } 24. } $isci = new Isci("Hüseyin Akdoğan"); 27. echo $isci->firma."\n"; //Kodcu A.Ş çıktılanacaktır 28. echo $isci->adres."\n"; //İstanbul/Türkiye çıktılanacaktır

11 29. echo $isci- >TicSicilNO."\n"; //Fatal error: Cannot access protected property 30. echo $isci->nacekod."\n"; //Fatal error: Cannot access protected property 31. echo $isci->getticsicilno()."\n"; //TicSicilNO bilgisi çıktılanacaktır 32. echo $isci->getnacekod()."\n"; //NaceKod bilgisi çıktılanacaktır Personel sınıfı/nesnesinde protected olarak deklare edilen TicSicilNO ve NaceKod özelliklerine, kalıtım yolu ile Personel sınıfından türemiş, Isci sınıfının bir yeni/new örneğini barındıran isci değişkenini kullanarak direk ulaşmak istediğimizde Fatal error: Cannot access protected property hatası alıyoruz. Hata mesajı ulaşmak istediğimiz özellik/property nin korumalı/protected olduğunu ve erişim iznimiz bulunmadığını söylüyor. Ancak bu iki özelliğe, kendilerini sarmaladığımız iki getter metodu ile ulaştığımızda, hem kalıtım yolu ile bu iki protected özelliğin alt sınıf/nesmemizce miras alındığını görüyor, hem değerlerine ulaşabiliyoruz. Private erişim belirtecine sahip sınıf/nesne özelliklerine, yalnızca sınıf/nesne içinden erişmek mümkündür ve bu özellikler kalıtım yolu ile aktarılmazlar. Private erişim belirtecine sahip sınıf/nesne özelliklerine erişim ihtiyacı için sarmalama yöntemine başvurmamız gerekmektedir. Aşağıdaki örneği inceleyelim. 1. class Asker { private $Birligi="İstanbul"; 4. function getbirligi() { 5. return $this->birligi; 6. } 7. } class Er extends Asker { public $Kunye; 12. function construct($kunye){ 13. $this -> Kunye = $Kunye; 14. } 15. } $asker = new Asker; 18. echo $asker->getbirligi(); //İstanbul bilgisi çıktılanacaktır 19. $er = new Er("Hüseyin Akdoğan, İstanbul, 1975/4, M"); 20. echo $er->kunye."\n"; //Kunye bilgisi çıktılanacaktır 21. echo $er->birligi."\n"; //Undefined property hatası alınacaktır Static anahtarı Static anahtarı ile deklare edilen sınıf/nesne özellik ve metotlarına, o sınıf/nesnenin bir yeni/new örneğini oluşturmadan sınıf/nesne dışından erişmek mümkündür. Bu erişim, yine static bir metod yada etki alanı çözünürlük işleci(:: anahtarı) ile sağlanır. Örneğimizi inceleyelim. 1. class Dersler { static $Konu = "Fen Bilimleri"; 4. public $Not; function construct($not){ 7. $this -> Not = $Not; 8. } 9. } echo Dersler::$Konu."\n";

12 Kodumuzda static olarak deklare edilmiş Konu adındaki sınıf/nesne özelliğine, Dersler sınıfı/nesnesinin bir yeni/new örneğini oluşturmadan, etki alanı çözünürlük işleci(::) ile ve $ sembolünü kullanarak eriştiğimizi görüyorsunuz. Static olarak deklare edilmiş sınıf/nesne özelliklerine, sınıf/nesnenin bir yeni/new örneği oluşturulmadan erişebiliyor oluşumuz sebebi ile, bu özelliklere $this ve -> anahtarları ile ulaşamayız. Aynı sebeple $this anahtarını, static bir metod içinde de kullanamayız. 1. class Dersler { static $Konu = "Fen bilimleri"; 4. public $Not; function construct($not){ 7. $this -> Not = $Not; 8. } public static function getkonu(){ 11. return self::$konu; 12. } 13. } echo Dersler::getKonu()."\n"; 16. $ders = new Dersler("8"); 17. echo $ders->konu; //Undefined property hatası alınacaktır Kodumuzda yer alan getkonu metoduna dikkat ederseniz, onun da static olarak deklare edildiğini ve bu sebeple Dersler sınıf/nesnesinin bir yeni/new örneği oluşturulmadan çağrılabildiğini görürsünüz. Metod içinde self anahtarına da dikkat edin. Self anahtarı isimlendirmesinden de anlayabileceğiniz gibi, sınıf/nesnenin statik özellik ve metodlarına erişim için kullanılmaktadır. Son olarak, static bir özellik yada metodu aynı zamanda protected yada private olarak da deklare edebileceğinizi ve bu static özellik ve metodların kalıtım yolu ile alt sınıf/nesnelerce miras alınacağını da belirtelim. Metodların iptal edilmesi/method overriding Türemiş bir sınıf, türetildiği sınıfta yer alan bir metodu kendi içinde iptal edebilir. Örneğimizi inceleyelim. 1. class Yayin { function okuyorum(){ 4. echo "Her hangi bir yayını okuyorum..."; 5. } 6. } class YazilimDergisi extends Yayin { function okuyorum(){ 11. echo "Yazılım Dergisi okuyorum..."; 12. } 13. } $dergi = new YazilimDergisi; 16. echo $dergi->okuyorum(); YazilimDergisi isimli sınıf/nesnemiz, kendisinden türetildiği Yayin sınıf/nesnesinde yer alan okuyorum metodunu kendi içinde barındırarak, kalıtım yolu ile miras aldığı metodu override etmiş yani geçersiz kılmıştır. Bunun anlamı, YazilimDergisi sınıf/nesnesi üzerinden okuyorum metodu çağrıldığında, çalışacak metodun, kalıtım yoluyla miras alınan değil, YazılımDergisi sınıf/nesnesi içinde deklare edilen metod olacağıdır. Kodu çalıştırdığımızda alacağımız çıktı

13 Yazılım Dergisi okuyorum olacaktır. Final Sınıf/Metodlar Final anahtarı, PHP 5 ile gelen yeniliklerden biridir. Final anahtar sözcüğü ile deklare edilmiş bir sınıf genişletilemez, yani bir başka sınıf extends anahtarı ilekendisinden türetilemez. Yine final olarak tanımlanmış bir metod, türemiş sınıflar içinde geçersiz(override) kılınamaz. Örneklerimizi inceleyelim. 1. final class Kalici { function tostring(){ 4. return "Bu sınıf final olarak deklare edildiğinden, genişletilemez..."; 5. } 6. } class Doviz { final function dovizcinsi() { 11. return "Bilinmiyor..."; 12. } 13. } class Dolar extends Doviz { function dovizcinsi(){ 18. return "Döviz cinsi: Dolar..."; 19. } 20. } $dolar = new Dolar; 23. echo $dolar->dovizcinsi(); //Cannot override final method 24. //hatası alınır $kalici = new Kalici; 27. echo $kalici; //"Bu sınıf final olarak deklare 28. //edildiğinden, genişletilemez..." 29. //stringi çıktılanacaktır Hızlıca kodumuzu incelediğimizde, Kalici sınıf/nesnesinin final olarak deklare edildiğini görüyoruz. Bu sınıf/nesneyi bir başka sınıf/nesne kalıtım yolu ile genişletemez. Bu sınıfta tostring metodu dikkatinizi çekmiş olmalı. Bu metod, sınıf/nesnelerimiz hakkında çıktılamak istediğimiz tanıtıcı/info bilgisi için kullanılabileceği gibi, geliştirme aşamasında test ve hata ayıklama/debugging işlemlerinde de bize yardımcı olabilir. Döviz sınıf/nesnesine geldiğimizde, burada dovizcinsi isminde bir metodun final anahtarı ile deklare edildiğini görüyoruz. Doviz sınıf/nesnesinden türeyen(bir başka değiş ile Doviz sınıf/nesnesini genişleten) Dolar sınıf/nesnesi içinde de aynı isimde bir metodun yer aldığını görüyoruz. Dolar nesnesi üzerinden bu metoda ulaşmaya çalıştığımızda Cannot override final method hatası alacağız. Gördüğünüz gibi anlat anlat bitmiyor, NYP konusunda tekrar görüşeceğiz

14 PHP de Soyut/Abstract sınıflar NYP yaklaşımında belli başlı ve öncelenmesi gereken konu/kavramlar şunlardır. Kalıtım/Inheritance Soyutlama/Abstraction Arayüzler/Interface Çok biçimlilik/polymorphism Kalıtım konusunu daha önce işlemiştik, bu yazıda PHP de soyutlama konu/kavramını kod örnekleri ile ele almak istiyorum. Soyutlama/Abstraction Soyut sınıflar, içlerinde en az bir soyut metod barındıran ve sınıf/nesnenin yerine getirmesi istenen temel işlevi metod düzeyinde belirlemek dışında ayrıntılara yer vermeyen yapılardır. Bu sınıf ve metodlara soyut denmesinin sebebi, somut işlevleri içermemeleri, bu somut işlevleri kalıtım yolu ile kendilerinden türeyen sınıflara bırakmalarıdır. Soyut bir sınıfın yeni/new bir örneği oluşturulamaz ve soyut sınıfı genişleten sınıflar, soyut sınıftaki soyut metodları iptal/override etmek zorundadırlar. İptal/override edilen metodların erişim belirtçeleri, soyut metodun deklare edildiği erişim belirteçlerinden daha sınırlı olamaz. Bu, örneğin protected olarak deklare edilmiş soyut bir metodu iptal/override edecek metodun private erişim belirteçine sahip olamayacağı anlamına gelmektedir. Basit bir örnekle soyut/abstract sınıf/neslelere giriş yapalım. 1. abstract class Personel { public $maas; 4. abstract public function pozisyon(); } class Isci extends Personel { function construct($maas){ 11. $this -> maas = $maas; 12. } public function pozisyon(){ 15. return "Pozisyon: İşçi, maaş: ".$this->maas; 16. } } class Mudur extends Personel { function construct($maas){ 23. $this -> maas = $maas; 24. } public function pozisyon(){ 27. return "Pozisyon: Personel Müdürü, maaş: ".$this->maas; 28. } } //$personel = new Personel; Cannot instantiate abstract class Personel

15 33. $calisan = new Isci("750 TL"); 34. $mudur = new Mudur("1250 TL"); echo $calisan->pozisyon()."\n"; 37. echo $mudur->pozisyon()."\n"; Kodumuzu incelediğimizde, Personel isminde soyut/abstract bir sınıf/nesnemiz olduğunu, bu sınıf/nesneyi Isci ve Mudur adında iki sınıf/nesnenin genişlettiğini görüyoruz. Personel sınıfı soyuttur çünkü pozisyon adında gövdesiz soyut bir metoda sahiptir, bu yüzden sınıf/nesne soyut/abstract olarak deklare edilmiştir. 1. abstract class Personel 1. abstract public function pozisyon(); Gövdesiz ifadesine ve yukarıda gördüğünüz pozisyon metodunun nasıl deklare edildiğine lütfen dikkat edin. Soyut metodlar gövde içermezler, bu yüzden soyutturlar ve ait oldukları sınıfı genişleten sınıfça iptal/override edilmek zorundadırlar. Burada soyut sınıfların, gövdeli metodlar da içerebileceğini ve bu metodların, türeyen/genişleten sınıf/nesne tarafından iptal edilmek zorunda olmadıklarını da belirtelim. Kodumuzu incelemeye devam edersek, soyut sınıf/nesnemizin soyut pozisyon metodunu, Personel sınıf/nesnesini genişleten Iscı ve Mudur sınıf/nesnelerinin iptal ettiğini, aynı şekilde bu iki sınıf/nesnenin, Personel sınıf/nesnesinin maas ismindeki özelliğini de kalıtım yoluyla miras alıp, bu özelliğie sınıf/nesne yapılandırıcısında değer set ettiklerini ve ardından çağrılan pozisyon metodu ile, çalışanın pozisyonu ve maaş bilgisinin ekrana bastırıldığını görüyoruz. Bir soyut sınıf/nesneyi kısaca incelediğimzie göre, zihninizde oluşması muhtemel peki ama neden/nerede, soyut sınıf ve metodlar kullanayım/kullanmalıyım? sorusunun cevabına gelelim. Ben soyutlama/abstraction ile, daha önce NYP yaklaşımının faydaları konusunda belirttiğim noktalardan birisi olan, tasarlanacak kod ile gerçek yaşam arasında akli bir bağ kurarak, tutarlı ve sağlam modellemeler inşaası arasında sıkı bir bağ görüyorum. Bu bağ, soyut sınıfların oynadığı birleştirici rolden kaynaklanmaktadır. Konuyu, kod örnekleri üzerinden incelediğimizde ne demek istediğim daha iyi anlaşılacaktır. Çeşit çeşit ürünün perakende satış fiyatlarını, fiyata o ürüne uygulanan kdv oranını yansıtarak döndüren bir sınıf/nesneye ihtiyacımız olduğunu düşünelim. Bu durumda klasik yöntemlerle geliştirilecek kod kabaca, her bir ürün için, kdv oranını ve fiyatı döndüren, o ürün(yani nesneye) has metodlar ihtiva edecektir. Oysa bu ihtiyacı, daha önce de belirttiğimiz soyut sınıfların oynadığı birleştirici rolden yararlanarak daha tutarlı/kararlı bir kodlama ile karşılayabilir, böylece kodumuzda ilerde olası değişiklikler için daha esnek ve genişletilebilir/geliştirilebilir bir yapı kurgulayabiliriz. Aşağıdaki kod, böylesi bir ihtiyaca cevap vermektedir. 1. abstract class Perakende { abstract public function KDV($urunKodu); 4. public function FiyatHesapla($fiyat, $urunkodu) { 5. return $fiyat + ($fiyat * $this->kdv($urunkodu)); 6. } 7. } class KuruUzum extends Perakende { 10. public $oran; 11.

16 12. public function KDV($urunKodu){ switch($urunkodu){ 15. case 1: 16. $this->oran = 0.08; 17. break; 18. case 2: 19. $this- >oran = 0.18; //Şeker, Soya vb. maddelerle kaplananlarda oran % break; 21. default: 22. $this->oran=0; //Tanımsız urun 23. } 24. return $this->oran; 25. } } class KuruIncir extends Perakende { 30. public $oran; public function KDV($urunKodu){ switch($urunkodu){ 35. case 1: 36. $this->oran = 0.08; 37. break; 38. case 2: 39. $this- >oran = 0.18; //Şeker, Soya vb. maddelerle kaplananlarda oran % break; 41. default: 42. $this->oran=0; //Tanımsız urun 43. } 44. return $this->oran; 45. } } $uzum = new KuruUzum; 50. $incir = new KuruIncir; echo "Kuru Üzüm, Ürün Kodu: 1 Fiyat: ".$uzum->fiyathesapla(200,1)." TL\n"; 53. echo "Kuru Üzüm, Ürün Kodu: 2 Fiyat: ".$uzum->fiyathesapla(200,2)." TL\n"; echo "Kuru İncir, Ürün Kodu: 1 Fiyat: ".$incir->fiyathesapla(200,1)." TL\n"; 56. echo "Kuru İncir, Ürün Kodu: 2 Fiyat: ".$incir->fiyathesapla(200,2)." TL\n"; Kodumuzu soyut Perakende sınıf/nesnemizden başlayarak inceleyeme başladığımızda, sınıf/nesnenin soyut KDV metodu yanı sıra, bu soyut metodu çağıran gövdeli FiyatHesapla metodunu içerdiğini görüyoruz. Perakende sınıf/nesnesini genişleten KuruUzum ve KuruIncir adında iki sınıf/nesnenin, soyut KDV metodunu iptal/override ettiğini ancak gövdeli FiyatHesapla metodunu iptal/override etmediğini görüyoruz. Bu, daha önce ifade ettiğimiz gibi zorunlu değildir. Bu noktaya dikkat çekme sebebim, bahsettiğimiz birleştirici rolün tam da bu noktada toplanmasındandır. KuruUzum ve KuruIncir sınıf/nesneleri, kalıtım yolu ile FiyatHesapla metodunu miras almışlardır, dolayısıyla bu iki sınıf/nesnenin yeni/new bir örneğini kendisinde depolanmış değişken üzerinden, FiyatHesapla metodunu çağırmak mümkündür ve bu yüzden tek bir metodla, Perakende sınıf/nesnesini genişleten sınıf/nesnelerin fiyatlarına kdv oranlarını yansıtabiliyoruz. 1. $uzum->fiyathesapla(200,1); Yukarıda gördüğünüz kullanımda gerçekleşen işlemleri adım adım irdeleyelim.

17 KuruUzum sınıf/nesnesinin bir örneğini taşıyan uzum değişkeni üzerinden -> anahtarı ile, kendisine 200 ve 1 değerleri parametre olarak geçirilmiş Perakende sınıf/nesnesinin FiyatHesapla metodu çağrılıyor. FiyatHesapla metodu içinde soyut KDV metodu, FiyatHesapla metoduna geçirilen parametrelerden ikincisi olan urunkodu parametresiyle $this->kdv($urunkodu) şeklinde çağrılıyor. Daha doğru bir ifade ile aslında tam bu noktada, PHP yorumlayıcı/çözümleyicisi KuruUzum sınıf/nesnesinin KDV metodunu çağırıyor. Daha sonra KuruUzum sınıf/nesnesinin KDV metodundan dönen değer, FiyatHesapla metoduna geçirilen parametrelerden birincisi olan fiyat parametresi ile çarpılıyor, böylece ürün fiyatına eklenecek KDV tutarı hesaplanmış oluyor. Ardından aynı satırda, hesaplanan KDV tutarı, çıplak fiyatı temsil eden fiyat değerine eklenerek geri döndürülüyor. Burada gerçekleşen işlemlerde can alıcı(bir başka değiş ile geliştirici için kurtarıcı ) noktanın, FiyatHesapla metodunu çağıran nesneye bağlı olarak çağrılacak KDV metodunu PHP yorumlayıcı/çözümleyicisinin belirlemesi olduğunun tekrar altını çizelim. 1. $incir->fiyathesapla(200,1); Satırı çalıştırıldığında yukarıda anlatmaya çalıştığım adımlar tekrar edilecek, değişen tek şey, FiyatHesapla metodunu çağıran nesne değiştiği için çağrılacak KDV metodu olacaktır.

18 Burada biz, KuruUzum KuruIncir ve eklenebilecek diğer ürünlerin fiyat hesaplamasını, nesnenin diğer işlemlerinden soyutladık, bu soyutlama sayesinde soyut Perakende sınıfını genişleten nesnelerin tamamının fiyat hesaplamasını, FiyatHesapla metodunda, yani tek bir metod içinde yaptık. Bunun kod geliştirme sürecinde bizlere sağladığı yarar açıktır. Projeye eklenecek yeni nesnelerin fiyat hesaplaması için ekstra hiçbir şey yapmamıza gerek kalmayacaktır. Ayrıca, fiyatlara yansıtılacak bir değişim söz konusu olduğunda(örneğin bütün ürünlerde %20 indirip kampanyası gibi), müdahale edeceğimiz yer sadece FiyatHesapla metodu olacaktır.

19 PHP de Nesne Arayüzleri/Object Interfaces NYP yaklaşımında, öncelikle ele alınması gereken konu/kavramları işlemeye devam ediyoruz. Hatırlayacağınız gibi bir önceki yazıda soyut/abstract sınıf ve metodları incelemiştik, bu gün ise kullanım ve iş mantığı soyut sınıflara çok benzeyen nesne arayüzlerini(objectinterfaces) ele alacağız. Arayüz/Interface Nesne arayüzleri soyut sınıf/nesnelere çok benzerler, nesne arayüzlerinin soyut sınıf/nesnelerden ayrıldıkları temel nokta, gövdeli yordamlar barındırmamaları ve içerdikleri metod ve özelliklerin public erişim belirteçine sahip olma zorunluluğudur. Nesne arayüzlerinin sadece gövdesiz metodlar içermeleri, soyut sınıf/nesneleri ele aldığımız yazıda belirttiğimiz birleştirici olma özelliği hatırlanacak olursa, geliştirdiğimiz kodda böylesi bir yaklaşımı zorlamak istediğimizde başvurabileceğimiz temel aracın nesne arayüzleri olduğunu bize düşündürecektir. Temelde soyut sınıf/nesneler ile nesne arayüzlerinin amacı, gövdesiz metodlarını kendilerini genişleten/uygulayan sınıflara iptal/override ettirmektir. Dolayısıyla, sınıf/nesnelerimizin mutlaka ihtiva etmeleri gerektiğini düşündüğümüz metodlarımız varsa, soyut sınıf/nesneler ile nesne arayüzlerine başvurarak, sınıf/nesnelerimizi buna zorlarız. Nesne arayüzleri, interface anahtar sözcüğü ile deklare edilir/tanımlanır. Bu arayüzlerimplements işleci ile sınıf/nesnelere uygulanır/gerçeklenir. Yine nesne arayüzleri diğer nesne arayüzlerince genişletilebilir. Nesne arayüzlerindeki metodların tamamı, arayüzü uygulayan/implement eden sınıf/nesne içinde iptal/override edilmelidir(nese arayüzlerini uygulayan soyut/abstract sınıf/nesnelerin böyle bir zorunluluğu yoktur) ve yine bir sınıf/nesne, birden fazla arayüzü uygulayabilir. Nesne arayüzlerine dair bilinmesi gereken temel bilgileri kısaca verdiğimize göre, konuyu kod örnekleri üzerinden incelemeye geçebiliriz. 1. interface Personel { 2. public function tabiolduguyasa(); 3. } class Memur implements Personel { 6. public function tabiolduguyasa(){ 7. return "657 sayılı Devlet Memurları Kanunu..."; 8. } 9. } class Isci implements Personel { 12. public function tabiolduguyasa(){ 13. return "1475 sayılı İş Kanunu..."; 14. } 15. } Kodumuzda görüldüğü üzere, Personel isminde, interface anahtarı ile deklare edilmiş ve tabiolduğuyasa isminde gövdesiz bir metoda sahip bir arayüzümüz var. Personel arayüzünü iki sınıf/nesnenin, impelements anahtarı ile implement ettiğine yani uyguladığına ve arayüzün sahip olduğu metodu iptal/override ettiğine dikkat edin. Bu iptal/override işlemi, Personel arayüzünü uygulayan her sınıf/nesne için bir zorunluluktur. Basit bir arayüz deklerasyon ve implementasyonunu gördüğümüze göre, tıpkı soyut sınıf/nesnelerde olduğu gibi ilk başta aklınıza gelebilecek muhtemel peki ama neden/nerede, nesne arayüzlerini kullanayım/kullanmalıyım? sorusunun cevabına gelelim.

20 Bu sorunun cevabı, soyut sınıf/nesneler için verilen cevapta olduğu gibi birleştirici rol ün anlam ve mahiyetinde gizlidir. Arayüzlerin oynadığı birleştirici rolü, aşağıda yer alan birazdan inceleyeceğimiz kodda görmeniz mümkündür. Önce UML diyagramına bakalım.

21 Kodumuz; 1. interface Bitki { 2. public function familya(); 3. public function govde(); 4. } interface Agac extends Bitki{ 7. public function yaprak(); 8. } interface Patates extends Bitki{ 11. public function renk(); 12. } class Kavak implements Agac{ public function familya(){ 17. return "SALİCACEAE"; 18. } 19. public function govde(){ 20. return "ODUNSU"; 21. } public function yaprak(){ 24. return "YAPRAKLI"; 25. } public function getadi(){ 28. return "Kavak Ağacı"; 29. } 30. } class Granula implements Patates { public function familya(){ 35. return "SOLANACEAE"; 36. } public function govde(){ 39. return "YUMRU"; 40. } public function renk(){ 43. return "SARI"; 44. } public function getadi(){ 47. return "Granula Patates"; 48. } 49. } class Goster { public function Info(Bitki $bitki){ 55. echo $bitki->getadi().", Familyası: ".$bitki->familya()." Gövdesi: ".$bitki- >govde()."\n"; 56. } } $goster = new Goster; 61. $kavak = new Kavak; 62. $granula = new Granula; $goster->info($kavak); 65. $goster->info($granula);

22 Kavak Ağacı, Familyası: SALİCACEAE Gövdesi: ODUNSU Granula Patates, Familyası: SOLANACEAE Gövdesi: YUMRU UML diyagramı ve kodumuza baktığımızda, familya ve govde adında iki metoda sahip Bitki isimli arayüzün, Agac ve Patates arayüzlerince genişletildiğini, bu iki arayüzünden Agac ın yaprak, Patates in ise renk isminde birer metoda sahip olduğunu görüyoruz. Kavak isimli sınıf/nesne Agac arayüzünü implement ederken, Granula sınıf/nesnesi ise Patates arayüzünü implement ediyor. Her iki sınıf, uyguladıkları arayüzlerin gövdesiz metodlarını iptal/override ediyor. Burada dikkat edilmesi gereken, iptal/override edilen metodlar arasında Bitki arayüzünde deklare edilen familya ve govde metodlarının da olmasıdır. Bunun sebebi, Agac ve Patates arayüzlerinin kalıtım yolu ile Bitki arayüzünden bu metodları miras almış olmalarıdır. Kodumuzda, UML diyagramında yer almayan Goster ismindeki sınıfın info metodu, nesne arayüzlerinin oynadıkları birleştirici rolü tam olarak gözlemleyebileceğimiz yerdir. 1. public function Info(Bitki $bitki){ 2. echo $bitki->getadi().", Familyası: ".$bitki->familya()." Gövdesi: ".$bitki- >govde()."\n"; 3. } Metodun Bitki arayüzü tipinde bir parametre aldığına dikkat edin. İşte bu sayededir ki, 1. $goster->info($kavak); 2. $goster->info($granula); şeklinde bir kullanım ile, tek bir metod içinde, Bitki arayüzünü implement eden sınıf/nesnelerin, bu arayüzde gövdesiz olarak deklare edilip sınıf/nesne içinde iptal edilmiş metodlarını çağırabiliyor ve nesne özelliklerini çıktılayabiliyoruz. Altını çizerek belirtelim ki burada gördüğümüz şey, Kavak, Patates ve bu yapıya eklenebilecek diğer bitkilerin familya, gövde ve isim bilgilerini tek bir metod içinde, nesnenin implement ettiği arayüz tipindeki değişken referansı ile çıktılanmasıdır. Böylesi bir kullanımın, ortak kategoriler ve fakat farklı içerikler ihtiva eden yapılarda kod geliştirme sürecinde bizlere sağladığı yarar açıktır. Projeye eklenecek yeni bitkilerin farklı familya ve gövde yapılarına sahip olması ve yine bunlar dışında(örneğimizdeki yaprak, renk unsurları gibi) özelliklerinin bulunması bizim için bir sorun oluşturmayacaktır. Ortak kategorilerdeki farklı özellikleri, yine aynı yöntemle tek bir metod ve referansla çıktılayabileceğiz.

23 PHP de Çok Biçimlilik/Polymorphism Bu gün ele alacağımız Çok biçimlilik/polymorphism konusu ile, PHP de NYP yaklaşımı konusunu nihayetlendiriyoruz. Çok biçimlilik(yazının devamında polimorfizm diyeceğiz) kalıtım konusuyla ilintilidir ve bir örneği, nesne arayüzlerini ele aldığımız yazıda geçmiştir. O örnekte, Bitki tipinde parametre alan Info metoduna, Bitki arayüzünü implement eden sınıf/nesnelerin parametre olarak geçirildiğini, bu nesneler üzerinden de söz konusu arayüzde gövdesiz olarak deklare edilip sınıf/nesneler içinde iptal edilmiş metodlarını çağrılabildiğini görmüştük. Bunu sağlayan şey, soyut sınıf/nesneler konusunu işlerken de değindiğimiz birleştirici olma fonksiyonu idi. Bu birleştiriciliği kalıtım ve onun doğurduğu akrabalık ilişkisine yakından bakarak anlamaya çalışalım. 1. public function Info(Bitki $bitki){ 2. echo $bitki->getadi().", Familyası: ".$bitki->familya()." Gövdesi: ".$bitki- >govde()."\n"; 3. } Kalıtım konusunu ele aldığımız yazıdan hatırlayacağınız üzere kalıtım, bir sınıfın bir başka sınıftan türemesidir. Türemiş sınıf, kendisinden türediği sınıftan özellik ve metodları miras almaktadır ve kalıtım konusunda en önemli kavram, bu miras kavramıdır. Türemiş sınıf ile türetildiği sınıf arasında miras bağını oluşturan akrabalık vardır, buna bir ilişkisi de diyoruz. Türeyen sınıf aynı zamanda bir türetilen sınıftır. Daha önce çokça örneği geçtiği için tekrara düşmemek adına, bir ilişkisini basit bir örnek üzerinden tekrar gösterelim. 1. class Insan { private $dogum_tarihi; 4. } class Erkek extends Insan { private $boyu; 9. private $kilosu; 10. } class Kadın extends Insan { private $boyu; 15. private $kilosu; 16. } Insan sınıf/nesnesinden Erkek ve Kadın isminde iki sınıf/nesnenin türediğini görüyoruz. Erkekbir İnsan dır, Kadın da bir İnsan dır. Kalıtım yoluyla metod ve özelliklerin miras alındığını gözönüne alırsak, türetilen sınıfın kendisinden türediği sınıfın yaptığı her işi yapabileceğini görürüz. Örneğimizden hareketle bu Erkek ve Kadın sınıf/nesnesinin, İnsan sınıf/nesnesinin yaptığı her işi yapabileceği anlamına gelmektedir ve polimorfizm tam da bu noktada karşımıza çıkmaktadır. Ne demiştik, bir ilişkisi sebebi ile Erken aynı zamanda bir İnsan dır, Kadın da öyle. İşte polimorfizm ile kastetilen budur. Bir örnek üzerinden konuya tekrar yakından bakalım.

24 1. class Milletvekili { public $donem; 4. public $secimbolgesi; 5. public $pozisyon; function construct($donem, $secimbolgesi, $pozisyon) { 8. $this-> donem = $donem; 9. $this-> secimbolgesi = $secimbolgesi; 10. $this-> pozisyon = $pozisyon; 11. } function Oturum(){ 14. return "Meclis oturumuna katıldı..."; 15. } 16. } class Bakan extends Milletvekili { function construct($donem, $secimbolgesi, $pozisyon) { 21. parent:: construct($donem, $secimbolgesi, $pozisyon); 22. } function Oturum(){ 25. return "Bakanlar kuruluna katıldı..."; 26. } 27. } class Basbakan extends Bakan { function construct($donem, $secimbolgesi, $pozisyon) { 32. parent:: construct($donem, $secimbolgesi, $pozisyon); 33. } function Oturum(){ 36. return "Bakanlar kuruluna başkanlık yaptı..."; 37. } 38. } class MeclisTV { function haberler(milletvekili $mv){ 43. echo "Seçim bölgesi ".$mv->secimbolgesi." olan ".$mv->donem." ".$mv- >pozisyon 44.." ".$mv->oturum()."\n"; 45. } 46. } $mv = new Milletvekili("24. Dönem", "İstanbul", "Milletvekili"); 49. $bakan = new Bakan("24. Dönem", "İstanbul", "Kültür ve Turizm Bakanı"); 50. $basbakan = new Basbakan("24. Dönem", "İstanbul", "Başbakan"); $tv = new MeclisTV; 53. $tv->haberler($mv); 54. $tv->haberler($bakan); 55. $tv->haberler($basbakan); Kodu incelediğimizde, aralarında bir ilişkisi olan Milletvekili, Bakan ve Basbakan sınıf/nesnelerimizi görüyoruz. Bakan sınıf/nesnesi Milletvekili sınıf/nesnesinden türetiliyor, bu Bakan nesnesinin aynı zamanda bir Milletvekili olduğu anlamına geliyor ve Bakan sınıf/nesnesi, Milletvekili sınıf/nesnesine ait özellik ve metodları miras alıyor. Basbakan sınıf/nesnesi Bakan sınıf/nesnesinden türetiliyor, bu Basbakan nesnesinin aynı zamanda bir Bakan, Bakan sınıf/nesnesi Milletvekili sınıf/nesnesinden türetildiği için de aynı zamanda bir Milletvekili olduğu anlamına geliyor ve Basbakan sınıf/nesnesi, Milletvekili sınıf/nesnesine ait özellik ve metodları miras alıyor.

25 Elimizdeki Bakan nesnesi aynı zamanda bir Milletvekili ve Başbakan nesnesi aynı zamanda bir Bakan ve Milletvekili, işte polimorfizm Kodumuzda bu çok biçimliliğin bize sağladığı işlevselliği, MeclisTV sınıf/nesnemizin haberler metodunda görüyoruz. 1. function haberler(milletvekili $mv){ 2. echo "Seçim bölgesi ".$mv->secimbolgesi." olan ".$mv->donem." ".$mv- >pozisyon 3.." ".$mv->oturum()."\n"; 4. } Milletvekili tipinde parametre alan metodumuzu biz 1. $tv->haberler($mv); 2. $tv->haberler($bakan); 3. $tv->haberler($basbakan); bu şekilde, yani Bakan ve Basbakan nesnelerini parametre olarak geçirerek çağırabiliyor ve aşağıdaki çıktıyı alabiliyoruz. Seçim bölgesi İstanbul olan 24. Dönem Milletvekili Meclis oturumuna katıldı Seçim bölgesi İstanbul olan 24. Dönem Kültür ve Turizm Bakanı Bakanlar kuruluna katıldı Seçim bölgesi İstanbul olan 24. Dönem Başbakan Bakanlar kuruluna başkanlık yaptı Neden? Çünkü Bakan nesnesi aynı zamanda bir Milletvekili dir, Basbakan nesnesi de aynı zamanda hem Bakan hem Milletvekilidir. Yazının başlangıcında belirttiğim gibi, nesne arayüzlerini incelediğimiz yazıda gördüğümüz Info metodu içinde olan da budur. Kalıtım ile oluşan bir ilişkisi, soyut sınıf/nesneler ile nesne arayüzlerini incelediğimiz yazılarda değindiğimiz birleştirici olma fonskiyonu nun da doğurduğu bir sonuçtur.

26 EK 1 / Yapısal programlama Yapısal programlama, programlama dilleri kullanılarak yazılan, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilirler. Bu yolla uzun ve karmaşık programların, bloklara ayırarak daha kolay biçimde yazılabilmesi mümkün olmaktadır. Yapısal programlama yordamsal programlamanın bir alt/yan dalı olarak görülebilir, temel programlama tekniklerinden birisidir. goto terimine karşı bağımlılığı azalttığı ve hatta kaldırdığı için ünlenmiştir. Tarihsel olarak bakıldığında yapısal programlamadan pek çok alt yöntem türetilmiştir. Bunlardan ikisi Jackson ın Yapısal Programlaması ve Dijkstra nın Yapısal Programlamasıdır. Yapısal programlama, yordamsal programlama dillerinin pek çoğu ile yapılabilmektedir lerin başlarında popülerleşmeye başlayan yapısal programlama ile pek çok yeni yordamsal programlama dili yapısal programlamayı destekleyecek özellikleri barındırmaya başladılar. Bu dillere örnek olarak Pascal ve Ada verilebilir. Küçük kod parçacıkları seviyesinde yapısal programlama hiyerarşik program akışı yapılarını tavsiye eder. Bu yapılar pek çok modern dilde kolayca elde edilebilen, while, repeat, for gibi yapılardır. Yapısal programlama bu yapılar için tek giriş ve tek çıkış noktalarını tavsiye eder. Bu tavsiyeyi zorunlu kılan dillere rastlanmaktadır. Bu teknik ile programcılar büyük kod parçalarını daha kısa alt yordamlar halinde yazarlar. Bu sayede parçacıklar anlaşılabilecek kadar küçük olurlar. Genel olarak programlarda çok az veya hiç genel (global) değişkenler kullanılmaz, genel değişkenler yerine altyordamlar yerel değişkenler kullanırlar ve değişkenlerini adres ve değer ile gönderir. Dijkstra nın yapısal programlaması Dijkstra nın yapısal programlaması programın alt bölümlere ayrılması ve programın tek giriş ve çıkış noktası olması mantığına dayanır. Yukarıda anlatılan Yapısal Programlamanın temeli Dijkstra nın tekniğine dayanır. Jackson ın Yapısal Programlamas Jackson ın Yapısal Programlaması (JYP) veri akışı yapısı ile program yapısı arasındaki ilişkiye dayanır. JYP ilk olarak 1970 lerde Michael A. Jackson tarafından geliştirilmiş ve Principles of Program Design isimli kitabında yayınlanmıştır. Jackson ın amacı standart COBOL programlamayı iyileştirmek olsa da bu metot modern programlama dilleri (örneğin C ve Perl gibi) ile kodlamada da geçerlidir. JSP yi oluşturan temel yapılar Temel eylemler Sıralamalar Tekrarlar Seçimler Metot programın girdilerinin temel yapılar ile ifade edilmesi ile başlar. Daha sonra programın çıktıları aynı şekilde ifade edilirler. Her girdi ve çıktı ayrı bir Veri Yapısı Diyagramı olarak modellenirler. Girdi ve çıktı yapıları daha sonra Program Yapı Diyagramı (PYD) olarak birleştirilirler. Bazı programlar tüm veriyi almadan çıktı üretmezken bazıları her girdi birimi için çıktı üretir, bu durum PYD de işlenmiş olur. Dil bağımlı olmayan PYD daha sonra bir programlama dili vasıtası ile uygulanır. PSD daha çok yordamsal diller için uygun bir yaklaşım olup nesne yönelimli dillerde kullanılmamaktadır. JSP programın girdi, çıktı ve program yapısını anlatmak için diyagramları kullanır.

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama 1 Nesne Yönelimli Programlama Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Programlama Dili ve Yazılım Tasarımı, Altuğ B. Altıntaş, Papatya

Detaylı

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir; abstract Sınıflar 1 Özet sınıflar ya da özet metotlar abstract anahtar sözcüğü kullanılarak tanımlanırlar. Bir temel sınıf içinde bildirilen abstract metotların içeriği boştur. Kendisinden yeni bir instance

Detaylı

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi 5.HAFTA Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi Sınıf Kavramı: Sınıf (class) soyut bir veri tipidir. Nesne (object) onun somutlaşan bir cismidir. Java da sınıf (class) kavramını

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

BİL-141 Bilgisayar Programlama I (Java)

BİL-141 Bilgisayar Programlama I (Java) 1 BİL-141 Bilgisayar Programlama I (Java) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu,

Detaylı

public static int Toplam int x, int y

public static int Toplam int x, int y static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Detaylı

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1 Görsel Programlama DERS 02 Görsel Programlama - Ders02/ 1 Kodun Tekrar Kullanımı ve Kalıtım(Inheritance) Nesneye yönelik programlamanın diğer programlama paradigmalarına karşı bir avantajı kodun yeniden

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kapsülleme (Erişim Denetleyiciler) Java da Sınıf Oluşturmak Java da Nesne Oluşturmak Java da Constructor Kavramı Java da This Kavramı Java da Constructor

Detaylı

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kalıtım Kavramı Java da Çok Biçimlilik Kavramı Fonksiyonların Çok Biçimliliği Yapıcı Fonksiyonun Çok Biçimliliği Java da Kalıtım Kavramı 4 Kalıtım;

Detaylı

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts

Detaylı

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB TASARIM I Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta PHP Tanımı ve Sunucu Kurulumları 2. Hafta PHP Yazım Notasyonu

Detaylı

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB PROGRAMLAMA II Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Oturum yönetimi 2. Hafta Cookies kullanımı ve oturum yönetimi

Detaylı

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ Java programlama dili, Java SUN bilgisayar şirketi tarafından 1991 yılında geliştiril Program bloklar halinde yazılır ve bloklar { } ile oluşturulur. Komutlar aynı satıra

Detaylı

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1 Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1 Arayüz (Interface) Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir. Arayüzler tamamen birleştirici bir rol oynamaları

Detaylı

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz. C# da Diziler Diziler için aynı tipteki verilerin tutulduğu bir koleksiyon diyebiliriz. Örneğin integer verinin bir yığın şeklinde tutulması için dizileri kullanırız. C# da diziler referans tipinde değişkenlerdendir.

Detaylı

Ders 8 Konu Özeti ve Problemler

Ders 8 Konu Özeti ve Problemler Ders 8 Konu Özeti ve Problemler C# ve Nesne Yönelimli Programlamanın 3 Prensibi Kapsülleme (Encapsulation) Nesne yönelimli programlamanın ilk prensibi kapsülleme (encapsulation) olarak adlandırılır. Bu

Detaylı

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA

SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA NESNE YÖNELİMLİ PROGRAMLAMA GİRİŞ SINIF YAPISI ve NESNE YÖNELİMLİ PROGRAMLAMA Yazılım teknolojileri son 40 yılda artan bir ivmeyle gelişmeye devam etmektedir. Buna paralel olarak zamanla artan ve çeşitlenen kullanıcı istekleri doğrultusunda

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7 Yukarı Çevirim (Upcasting) Çok Biçimlilik (Polimorfizm) Sözlük anlamı "bir çok şekil " Bir metodun aynı isimle farklı parametrelerle çağırılmasıdır. Çok Biçimlilik

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Klavyeden Basit Giriş/Çıkış İşlemleri

Klavyeden Basit Giriş/Çıkış İşlemleri Klavyeden Basit Giriş/Çıkış İşlemleri Klavyeden veri girilmesi, girilen verilere çeşitli işlemler uygulandıktan sonra ekrana yazdırılması ya da herhangi bir yazıcıdan çıktı alınması gibi işlemlerdir. Javada

Detaylı

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Yazılım Kodlama ve İ simlendirme Standartları v1.0 Yazılım Kodlama ve İ simlendirme Standartları v1.0 İçerik Yazılım Kodlama ve İsimlendirme Standartları... 2 1. Amaç... Hata! Yer işareti tanımlanmamış. 2. Kapsam... Hata! Yer işareti tanımlanmamış. 3.

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 6 Kalıtım (Inheritance) - I Bu bölümde;

Detaylı

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB PROGRAMLAMA II Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Oturum yönetimi 2. Hafta Cookies kullanımı ve oturum yönetimi 3. Hafta Session kullanımı

Detaylı

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma C Programlama Dr. Serkan DİŞLİTAŞ 7.1. Metot Kavramı Programlama dillerinde bütün kod satırlarının

Detaylı

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler. MVC MVC Anlamakta zorluk çekiyorsanız bu yazımı dikkatle okumanızı tavsiye ediyorum. Derslerde öğrencilerimin en çok zorlandıkları konu MVC nin mantığıdır. Önce MVC anlamaya çalışmak yerine MVC den biraz

Detaylı

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma TEMEL BİLGİSAYAR BİLİMLERİ Programcılık, problem çözme ve algoritma oluşturma Programcılık, program çözme ve algoritma Program: Bilgisayara bir işlemi yaptırmak için yazılan komutlar dizisinin bütünü veya

Detaylı

BİL-142 Bilgisayar Programlama II

BİL-142 Bilgisayar Programlama II BİL-142 Bilgisayar Programlama II (C/C++) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Sınıflar, Nesneler, Fonksiyon ve Veri Üyeleri Sınıf ve Fonksiyon Üyeleri

Detaylı

1 PROGRAMLAMAYA GİRİŞ

1 PROGRAMLAMAYA GİRİŞ İÇİNDEKİLER IX İÇİNDEKİLER 1 PROGRAMLAMAYA GİRİŞ 1 Problem Çözme 1 Algoritma 1 Algoritmada Olması Gereken Özellikler 2 Programlama Dilleri 6 Programlama Dillerinin Tarihçesi 6 Fortran (Formula Translator)

Detaylı

Spring Giriş Eğitimi

Spring Giriş Eğitimi Spring Giriş Eğitimi Bu eğitimde Spring ın hangi problemlere karşı etkili olduğundan bahsedeceğim. Ayrıca çekirdek Spring teknolojisinin nasıl işlediği; Dependency Injection - DI ve Inversion of Contol

Detaylı

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input

Detaylı

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır. Bölüm 20 20 Arayüzler Arayüz bir sınıf değildir. Arayüz yazmak sınf yazmaya çok benzer ancak ikisi birbirinden farklı konseptlerdir. Sınıf bir nesnenin özelliklerini ve davranışlarını belirtirken; bir

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 7 Abstract (Soyut Sınıflar) Bu bölümde;

Detaylı

Java Class Yapısında Finalize Metotunun Kullanımı

Java Class Yapısında Finalize Metotunun Kullanımı Java'da finalize() Metodu: Java dili kullanılmayan nesneleri silmek için arka planda çalışan bir sisteme sahiptir. Bu yüzden C++ gibi dillerde dinamik nesne tanımlarında mutlaka yer alması gereken nesneyi

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu

Detaylı

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1 İsimler ve Kapsam Tanım: Bir değişkenin kapsamı (scope) değişkenin görülebilir olduğu komutların alanıdır. Görülebilir olduğu alan, bir komut içinde belirlenen değerle kullanılabildiği alandır. Tanım:

Detaylı

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Örneğin; bir öğrenci, sıra, çember, bir buton birer nesnedir. Bir

Detaylı

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi();

Detaylı

Ders 8: Metotlar. barisgokce.com

Ders 8: Metotlar. barisgokce.com Ders 8: Metotlar Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Metotlar C# içerisinde bir veya birden fazla kod bulunduran kod bloklarıdır. Bir nesnenin veya sınıfın programı

Detaylı

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1 Sınıfların Tekrardan Kullanılması Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1 İki Yöntem Komposizyon (Composition) Kalıtım (Inheritance) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı

Detaylı

NESNE TABANLI PROGRAMLAMA

NESNE TABANLI PROGRAMLAMA NESNE TABANLI PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Nesne Tabanlı Programlama Sınıf, Nesne Kavramları Kapsulleme, Kalıtım ve Çok Biçimlilik Kavramları Nesne Tabanlı Programlama NESNE TABANLI PROGRAMLAMA

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları METOTLAR Nesneye yönelik programlama dillerinde genellikle fonksiyonlar metot olarak isimlendirilirler. Metot ve fonksiyon olarak ifade edilecek kavramlar aynı anlamda kullanılacaktır. Her çalışan C# programı

Detaylı

7. HAFTA. Erişim Belirleyiciler

7. HAFTA. Erişim Belirleyiciler 7. HAFTA Erişim Belirleyiciler Java dilinde 4 tür erişim belirleyicisi vardır; bunlar friendly, public, protected ve private dir. Bu erişim belirleyiciler global alanlar (statik veya değil) ve yordamlar

Detaylı

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end 4 Metotlar Hemen her programlama dilinde var olan metot kavramı Ruby için de aynıdır. Bazı kaynaklarda metot terimi yerine fonksiyon terimi kullanılır. Bu kitapta iki terimi eşanlamlı kullanacağız. Ruby

Detaylı

Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com

Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Bir program bünyesinde, tanımlanan görevlerin yerine getirilebilmesi için birden

Detaylı

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

NESNE TABANLI PROGRAMLAMA Temel Kavramlar NESNE TABANLI PROGRAMLAMA Temel Kavramlar Özkan BİNGÖL Gümüşhane Üniversitesi Not: Bu sunumda, Yrd. Doç. Dr. Özlem AYDIN ve Doç. Dr. Yılmaz KILIÇASLAN ın Nesneye Yönelik Programlama dersi sunumlarından,

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA SANAL FONKSİYONLAR VE ÇOK BİÇİMLİLİK Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü GİRİŞ C++, hem derleyici-zamanlı hem de çalışmazamanlı çok biçimliliği destekler.

Detaylı

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama 1 Nesne Yönelimli Programlama Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Genel Bilgiler Ders konuları 1. Programlamaya Giriş 2. Program Denetimi ve Operatörler 3. Nesnelerin

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu sunumda Prof. Dr. Yılmaz KILIÇASLAN ın Nesneye Yönelik Programlama dersi sunumlarından

Detaylı

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2. İçerik Geçen ders: Kalıtım ( inheritance ) Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Ders #5 (18 Kasım 2009) Bu ders: Kalıtım ( inheritance ) tekrar ziyaret Java da super kullanımı

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Servlet Üst Düzey Programlama-ders01/ 1 Servlet Nedir? Web sayfaları ilk başlarda durağan bir yapıya sahipti ve kullanıcıdan bilgi alarak işlemler yapmıyordu. Zamanın geçmesiyle kullanıcıya

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

Bölüm 10 Statik ve Anlık Öğeler

Bölüm 10 Statik ve Anlık Öğeler Bölüm 10 Statik ve Anlık Öğeler Statik ve Anlık Öğeler Statik öğeler, bir sınıfta static sıfatıyla nitelendirilen değişkenler ve metotlardır. Bunlara sınıf değişkenleri de denilir. static nitelemesi almayan

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9 ARAYÜZLER VE DAHILI SINIFLAR Diğer programlama dillerinde olan çoklu kalıtım (multiple inheritance) özelliği Java programlama dilinde yoktur. Java programlama dilinde

Detaylı

Veritabanı Uygulamaları Tasarımı

Veritabanı Uygulamaları Tasarımı Veritabanı Uygulamaları Tasarımı Veri Tabanı Veritabanı yada ingilizce database kavramı, verilerin belirli bir düzene göre depolandığı sistemlere verilen genel bir isimdir. Günümüzde özel veya kamu kuruluşların

Detaylı

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1 Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit

Detaylı

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ Amaçlar: 1- Arayüzler (Interfaces) 2- Soyut Sınıflar ve Metotlar(Abstract classes and methods) Uygulama-1: interface:cihaz ac() kapat() goster(string) class: TV class: LCD class: Projector... Cihaz adındaki

Detaylı

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance) İki Yöntem Komposizyon (Composition) Kalıtım (Inheritance) Komposizyon(Composition) class Meyva { } //... class Elma { } private Meyva m = new Meyva(); //... Komposizyon - UML Örnek Motor.java AileArabasi.java

Detaylı

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Ders #5 (18 Kasım 2009) İçerik Geçen ders: Kalıtım ( inheritance ) Bu ders: Kalıtım ( inheritance ) tekrar ziyaret Java da super kullanımı

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave

Detaylı

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama Nesne Yönelimli Programlama Not: Bu dersin sunumları, Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu, M. Özbayoğlu, M. Erten, O. Ergin kitabı kullanılarak hazırlanmıştır. Konular Giriş Alt Sınıflar

Detaylı

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 4 Ders 2 Yrd. Doç. Dr. Melike Şah Direkoğlu Alındığı kaynak: Addison-Wesley s Programming Language Concepts slaytları ve Prof. Dr. Tuğrul Yılmaz ın ders notlarından

Detaylı

C Dersleri Bölüm 3 : Program akışı

C Dersleri Bölüm 3 : Program akışı İzmir Ekonomi Üniversitesi Bilgisayar Topluluğu www.ieubt.org C Dersleri Bölüm 3 : Program akışı Sorularınız için : programlama@ieubt.org Hazırlayan : Görkem PAÇACI (gorkem.pacaci@std.ieu.edu.tr) C Program

Detaylı

Nesneye Yönelik Tasarım ve Programlama (COMPE 501) Ders Detayları

Nesneye Yönelik Tasarım ve Programlama (COMPE 501) Ders Detayları Nesneye Yönelik Tasarım ve Programlama (COMPE 501) Ders Detayları Ders Adı Ders Kodu Dönemi Ders Saati Uygulama Saati Laboratuar Kredi AKTS Saati Nesneye Yönelik Tasarım ve Programlama COMPE 501 Güz 3

Detaylı

Kalıtım (Inheritance)

Kalıtım (Inheritance) Kalıtım (Inheritance) Kocaeli Üniversitesi Kalıtım (Inheritance) Kodların çok kez kullanımı (Software reusability) Mevcut Sınıflardan Yeni Sınıflar Oluşturma Mevcut sınıfın değişken ve fonksiyonları kullanılabilir.

Detaylı

Java Dersi. Altuğ Bilgin Altıntaş

Java Dersi. Altuğ Bilgin Altıntaş Java Dersi Altuğ Bilgin Altıntaş Bu Dönem Hakkında Corba Servlet RMI Temel Kısım EJB JSP XML 2 JDBC JNI Çalışma Evreleri 6 Çalışma Evreleri 7 Java dosyasının hali 7 İlk Java uygulaması 7 Ciddi bir uygulama

Detaylı

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu Java ile Nesne Merkezli ve Fonksiyonel Programlama 3. Bölüm Soyut Sınıflar (Abstract Classes) Akın Kaldıroğlu Kasım 2015 Küçük Ama Önemli Bir Konu Ø Bu dosya ve beraberindeki tüm, dosya, kod, vb. eğitim

Detaylı

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Ders İçeriği An introduction to Object-oriented programming with Java Third Edition Update Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Nesneye Yönelik Öğr.

Detaylı

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 VII 1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 2 KOD YAZMAYA BAŞLANGIÇ 11.Net Framework 11 Yeni Proje Oluşturmak

Detaylı

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir? Sınıf Diyagramları Sınıf diyagramı statik bir diyagramdır. Bir uygulamanın statik görünümünü temsil eder. Sınıf diyagramı sadece bir sistemin farklı yönlerini görselleştirmek, açıklamak ve belgelemek için

Detaylı

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ AD SOYAD: TESLİM TARİHİ: OKUL NO: TESLİM SÜRESİ: 2 hafta ÖDEV NO: 5 1- BANKA

Detaylı

YZM 2108 Yazılım Mimarisi ve Tasarımı

YZM 2108 Yazılım Mimarisi ve Tasarımı YZM 2108 Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 1 OOP Hatırlatma Bu bölümde Nesneye Yönelik

Detaylı

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. C PROGRAMLAMA FONKSİYONLAR Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra

Detaylı

Göstericiler (Pointers)

Göstericiler (Pointers) C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi

Detaylı

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM 2014) //Class (Sınıf) // Sınıf (class) soyut veri tipidir. // Nesne (object) sınıfın somutlaşan bir cismidir. // static : nesnesi oluşturulmaz.

Detaylı

Lambda İfadeleri (Lambda Expressions)

Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri, değişkenlere değer atamak için kullanılan sadeleştirilmiş anonim (isimsiz) fonksiyonlardır. Bu fonksiyonlar matematikteki ve bilgisayar bilimlerindeki

Detaylı

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Facade (Cephe) Tasarım Şablonu KurumsalJava.com Facade (Cephe) Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com Profesyonel yazılım sistemleri birçok komponentin birleşiminden oluşur. Yazılım esnasında bir çok

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 7 Kalıtım - II Bu bölümde; Soyut Sınıflar,

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

C# Metotlar ve Metot Tanımlama

C# Metotlar ve Metot Tanımlama C# Metotlar ve Metot Tanımlama Metot Kavramı : Metotlar bir program içerisinde aynı işi gerçekleştiren satırları belirli düzende sadece bir kez oluşturarak gerektiğinde tekrar tekrar kullanabilmemizi sağlayan

Detaylı

Java Programlama Interface ( Arayüzler )

Java Programlama Interface ( Arayüzler ) Java Programlama Interface ( Arayüzler ) Kitap Örneği Kodları Interface_Kitap_Ornek.java Bilimkurgu.java Macera.java Polisiye.java IOzellikler.java [crayon-5becc1e2c6927204070569/] [crayon-5becc1e2c693c780586792/]

Detaylı

Nesneye Dayalı Programlama

Nesneye Dayalı Programlama SAKARYA ÜNİVERSİTESİ Nesneye Dayalı Programlama Hafta 6 Prof. Dr. Ümit KOCABIÇAK Öğr. Gör. Özgür ÇİFTÇİ Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim"

Detaylı

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları Konsol Uygulaması Oluşturma Konsol uygulaması oluşturmak için program açıldıktan sonra Create: Project ya da New Project seçeneği tıklanabilir. New Project penceresini açmak için farklı yollar da vardır.

Detaylı

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi ARDIŞIL DİYAGRAM YAPI DİYAGRAMI Sistem Analizi ve Tasarımı Dersi İçindekiler Ardışıl Diyagram Nedir ve Neden Kullanılır... 3 Ardışıl Diyagram Elemanları... 3 MS Visio ile Ardışıl Diyagram Çizimi... 5 Violet

Detaylı

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6 ix Yazılım Nedir? 2 Yazılımın Tarihçesi 3 Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5 Yazılımın Önemi 6 Yazılımcı (Programcı) Kimdir? 8 Yazılımcı Olmak 9 Adım Adım Yazılımcılık 9 Uzman

Detaylı

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

if (ad == Sabri) Console.WriteLine(Merhaba Sabri. Ne zamandır gözükmüyodun...); Koşul İfadeleri ve Akış Kontrolü Koşul ifadeleri ve akış kontrolleri programlama dillerinde her zaman en önemli yeri tutmaktadır. Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 6 Kalıtım (Inheritance) - II Bu bölümde;

Detaylı

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 Bölüm 11 Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 11. Bölüm konuları Soyutlama kavramı Veri soyutlamasına giriş Soyut veri tipleri için tasarım konuları Dil örnekleri Parametreli

Detaylı

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu Java ile Nesne Merkezli ve Fonksiyonel Programlama 5. Bölüm Alt Sınıflar (Nested Classes) Akın Kaldıroğlu Ocak 2017 Küçük Ama Önemli Bir Konu Ø Bu dosya ve beraberindeki tüm, dosya, kod, vb. eğitim malzemelerinin

Detaylı

Decorator Tasarım Şablonu

Decorator Tasarım Şablonu Decorator Tasarım Şablonu KurumsalJava.com Özcan Acar Bilgisayar Mühendisi http://www.ozcanacar.com http://www.javadergisi.com Mevcut bir sınıf hiyerarşisini ya da sınıfın yapısını değiştirmeden, oluşturulan

Detaylı

Lecture 11: Generics

Lecture 11: Generics BLM202E Data Structures Lecture 11: Generics Bilgisayar Mühendisliği Bölümü Öğr. Gör. Musa AYDIN 2014 2015 (Bahar) BLM202E Data Structures - 2015 Spring Java programlama dilinin güçlü özelliklerinden biri

Detaylı

Kullanım Durumu Diyagramları (Use-case Diyagramları)

Kullanım Durumu Diyagramları (Use-case Diyagramları) Kullanım Durumu Diyagramları (Use-case Diyagramları) Analiz aşaması projeler için hayati önem taşır. İyi bir analizden geçmemiş projelerin başarı şansı azdır. Analiz ile birlikte kendimize Ne? sorusunu

Detaylı

... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI

... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI ... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE 2018 2019 ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI Hazırlayan : Özel Öğretim Kurumları Birliği (ÖZKURBİR) Dersin Adı : Bilişim

Detaylı

Operatörlerin Aşırı Yüklenmesi

Operatörlerin Aşırı Yüklenmesi Operatörlerin Aşırı Yüklenmesi Operatörlerin Aşırı Yüklenmesi Tıpkı fonksiyonlara yaptığımız gibi öperatörlere de aşırı yükleme yapabiliriz.yani, operatörlere normal görevlerinin yanında farklı görevler

Detaylı

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ Dersin Adı Kodu Sınıf/Y.Y. Ders Saati (T+U+L) Kredi AKTS Programlama Dillerinin Prensipleri BİM-323 3/II 3+0+0 3 4 Dersin

Detaylı

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf İçindekiler 1. Giriş... 1 1.2. c++ Programı Yapısı... 2 1.3.Using Direktifi... 5 Bölüm 2. Veri türleri, değişken kavramı, sabit ve değişken bildirimleri ve c++ da kullanımı 7 2.1. Temel veri türleri...

Detaylı

PORT HABERLEŞME SERİ PORT FARUK BOZAN

PORT HABERLEŞME SERİ PORT FARUK BOZAN PORT HABERLEŞME SERİ PORT FARUK BOZAN farukbozan@javatiryakileri.com bozanfaruk@gmail.com Merhaba değerli Java dostları. Bu yazımızda port haberleşme konusuna değineceğiz. Yalnız şu noktaya dikkatinizi

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 9: Sınıf İçerik Sınıf Tanımı Nesne Tanımı İkili Kapsam Çözme Operatörü UML ile Sınıfların Gösterimi 2 Sınıf kavramı, nesne-tabanlı programlamanın temelini oluşturur.

Detaylı