• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

OOP - NESNE TABANLI PROGRAMLAMA- IV - INHERITANCE (KALITIM)

Merhaba değerli arkadaşlar, Bir önceki yazımızda programlama dünyasının en önemli tekniklerinden olan Object Oriented Programming yani Nesne Tabanlı Programlama Tekniğinin üçüncü bölümünde örnek bir

19.06.2012

Yazar: Muhammed ÖNAL (Google+)

Kategori: VB.NET

10339

 VB.Net & NESNE TABANLI PROGRAMLAMA – IV

INHERITANCE (MİRAS / KALITIM)

Merhaba değerli arkadaşlar,

Bir önceki yazımızda programlama dünyasının en önemli tekniklerinden olan Object Oriented Programming yani Nesne Tabanlı Programlama Tekniğinin üçüncü bölümünde örnek bir proje üzerinde oluşturduğumuz class içinde tanımladığınız bir alana ve bu alan içinde OOP tekniklerinden Encapsulation (Kapsülleme) ile nasıl kısıtlamalar yapabileceğimizi göstermiştik. Bu yazımızda ise yine Nesne Tabanlı  Programlama tekniğinin Inheritance ( Miras / Kalıtım)  kavramını açıklayacağız.

 

Inheritance (Miras / Kalıtım) kavramı ile örneklendirmelerimize geçmeden önce bu kavramın ne anlama geldiğine hep birlikte bir göz atalım.

INHERITANCE ( Kalıtım / Miras) :

Inheritance yani Kalıtım, bir sınıfın özelliklerini başka bir sınıfa aktarması veya başka bir sınıfın kullanmasına izin vermesidir.  (Bir Sınıftan başka sınıflar türetmektir.)

Aslında buna günlük yaşamımızdan da direkt olarak örnek verebiliriz. Burada ki Miras kavramı tamamen insandaki genetik miras kavramıyla aynıdır. Yani bir çocuğun Anne ve Babasından saç rengi ve tipi, göz rengi vb. almış olması. Bu şekilde bizlerde oluşturduğumuz bir sınıfın özelliklerini ve fonksiyonları başka bir sınıfa aktarabiliyoruz. Ve Bunu da Kalıtım yani Miras olarak adlandırıyoruz.

Bu açıklamaları yaptıktan sonra şunu diyebiliriz. Inheritance (Kalıtım / Miras ) veren Sınıfımıza Base Class (Temel Sınıf) , Kalıtım / Miras alan Sınıfımıza Derived Class (Türetilmiş Sınıf) diye adlandırıyoruz.


        -  Türeme, Mirasın yani Kalıtımın ilk basamağıdır. Bir sınıfın başka bir sınıfın özelliklerini alması olarak tanımlayabiliriz. Hatta ve hatta özelliklerini aldığı sınıfı geliştirecek yeni özellikler elde edebilir.

 

Tam bu noktada programcı arkadaşlarımız bize şöyle bir soru yöneltebilirler. Inheritance ya da biraz bizim ne işimize yarayacak? Ya da şu şekilde soracak olursak, Neden Bir Sınıftan başka sınıflar türetiyoruz?

         Cevap:  Sorumuzun cevabı aslında çok basitçe cevaplandırılabilir. Nesne Tabanlı Programlama –I adlı makalemize göz atarsanız. Yazımızın giriş kısmında şunu söylemiştik. Nesne Tabanlı Programlama tamamen insan hayatını ve yaşamımızı taklit eder.  Şimdi sorumuzun cevabına bu taklitten yola çıkarak bir örnek ile açıklayalım. İnsan oğlu günlük hayatta ihtiyaç ve gereksinimlerinden yola çıkarak ve bir şeye kolay bir şekilde ulaşmak için kullandığı nesneleri (objects) kategorilere ayırarak bunları geneller.

 

Yani, şu şekilde anlatmak gerekirse; 
Mesela, bize bir VB.Net Programlama kitabı lazım. Ve bu VB.Net Programlama kitabını almak için bir kitapçıya gideriz. Karşımıza çıkan raflarda Okul Ders Kitapları, Bilgisayar Kitapları, Roman, Şiir…  Kategorilere ayrılmış rafları görürüz. Kararımızı ve seçimimizi önceden belirlediğimiz için satın alacağımız kitap Bilgisayar kitapları kategorisindedir. Daha sonra Bilgisayar Kitapları kategorisinden Programlama kategorisini bulur, aradığımız VB.Net Programlama kitabına ulaşırız. Bu şekilde genellemeden özelleştirme yaptık.
Ama bir genelleme aynı zamanda özelleştirmedir de, Gidiş yönümüze göre değişir.

Biz yazılımcı ve programcılar da yazdığımız programlarımızda, bazı nesneleri kategorize etmek isteyebiliriz.  Bundan dolayıdır ki Inheritance yani Miras'ın bizlere sunmuş olduğu avantajlarından faydalanıyoruz. Peki, Inheritance yani Kalıtım / Miras tekniği bize yazılımlarda ne gibi avantajlar sunuyor…

Şimdi o avantajlara hep birlikte bir göz atalım:

-          Yeniden kullanma ( code – reusability ) sayesinde daha az kod yazmak. Bu da profesyonel yazılım şirketlerinin Maliyetini azaltmıştır.

-          Kodda esneklik sağlar.  (flexibility)

-          Bağımlılığın azalmasını ve yan etkilerin azalmasını sunar.

 

Yani yeniden kullanma özelliği kullanılarak maliyeti düşürme noktasında yapacağımız iş, birbirleriyle benzer Sınıfları ayrı ayrı yazmak yerine, ortak üyeleri belirleyerek bir Base class oluşturmak ve geri kalanlarını bu base class’tan türetmek bize en büyük pratikliği ve kolaylığı sunacaktır.

 

Bildiğimiz gibi, .NET’de tüm tipler object(nesne)’den  türer. Burada söz konusu olan türeme de, inheritance/miras konusuna işaret etmektedir. Aşağıdaki örnekte object tipinde bir değişkenin metotlarını rahatlıkla görebiliyoruz.

 

 

Peki, inheritance / kalıtım / miras konusunda söylediğimiz  doğruysa ve tüm tipler bu object'den türüyorsa, herhangi bir .NET tipinde de, object metodlarını yada fonksiyonlarını  bulabilmeliyiz değil mi?

O zaman aşağıdaki örneğimize bakarak bunu göstermiş olalım.

 

 

Üstünü çizdiklerimizle bunu kanıtlamış olduk. Siz değerli okurlarımızda başta tiplerde deneme yaparak bunu kanıtlayabilirsiniz.

.NET kütüphanesinde tüm tiplerin, object tipinden türediğini kanıtlayarak göstermiş olduk. Şimdi sıra kendi tiplerimiz arasında Inheritance / Kalıtım uygulamaya geldi.

Şimdi gelin hep beraber üreten – türetilen ilişkisinin (base-derived) nasıl modellenebileceği örnek bir proje üzerinde gösterelim.

Örnek proje:  
Modellememizde, Bir Üniversite Yemekhanesinin kullanacağı yazılım programında  yer alacak olan Sınıflar arasında  Inheritance/Kalıtım  uygulayacağız.

Bir öğrenci Üniversite Yemekhanesine gittiğinde bu öğrencinin yemek masasında hangi çeşitler olur?

Yazımızın başında anlattığımız gibi bu projemizi önce bir genelleyelim sonrasında da özelleştirelim.
 



 

Şimdiye kadar bahsettiğimiz kurallarımızı örnek projemize uygulayalım, "Et yemeği (derived) bir yemektir(base)".   Şeklindeilişkilendirdik.       Şimdi de VB.Net Kod geliştirme ortamına geçerek kodlarımızı yazmaya çalışalım.       

 

Şimdi Class Yemek ait kodları verelim. Bu class’ımız vb.net kod geliştirme ortamında (Yemek.vb) şeklinde olacaktır.

 

 

Yemek Sınıfımızı oluşturduktan sonra şimdi de bu Yemek sınıfımızdan türetilmiş sınıfımızı  (Derived) oluşturalım. Bunu biz vb.net kod geliştirme ortamında ekleyeceğimiz yeni bir class’ı  EtYemekleri.vb şeklinde göstermiş olmamız lazım. Sınıfımıza ait kodlarımız aşağıdaki gibidir.

{C}{C}{C}

 

Kırmızıçizgi ile belirttiğimiz class ‘mız Türetilmiş Sınıftır. Ve Nasıl Miras bıraktığımıza dikkatinizi çekmek isterim.

Şimdi bakalım Form tarafında neler elde etmişiz ve bu sınıflarımız ne iş yapıyor:
Kodlarımızı inceleyelim.

 

 

 

 

Yemek Sınıf'ı içinde yazmış olduğumuz metod ve özelliklerin tamamı EtYemekleri sınıf'ına aktarıldı. Böylece ortak olan alanları, genelleme yoluyla ayırabilir ve Yemek sınıf'ından istediğimiz kadar sınıf türetebiliriz...

Söz konusu modelleme ise, küçük Microsoft Visual Studio’nun bize sunmuş olduğu avantajdan bahsetmek istiyorum. Bazen nesneleri görerek tasarlamak işimizi çok kolaylaştırır ve bize süre kaybını en aza indirgemiş olur. Visual Studio'da biz geliştirici ve programcılar için çok kullanışlı bir Class Diagram alanı mevcut. Şimdi hep birlikte bu Alana göz atacak olursak;

Solution Explorer penceresinden Projeye sağ tıklatıp açılan menüden View Class Diagram seçeneğini işaretlersek, projedeki Sınıflarımızın görsel tasarımını(visual design) görürüz.

 

 

Sınıflarımızın görsel tasarımı şu şekildedir.

 

 

 

Şimdi, herkesin aklına şöyle bir soru gelmiş olabilir. Yemek isimli Base class içinde yer alan SunumSekli metoduna dikkat etmişsinizdir. İçeriğinde "Salata ve Pilav ile birlikte" yazıyor. Peki, menümüzdeki tüm yemekler aynı şekilde mi sunulacak? Elbette ki hayır. Yani, bazı metodlar ve özellikler(property); base class'da yazıldıkları gibi kullanılmak zorunda değiller.

Hemen ardından başka bir soru sorduğunuzu duyar gibiyim J Peki, bu durumu nasıl düzelteceğiz? Her yemeğin bir SunumSekli() vardır ama bunların her birinin içeriği aynı olamaz. Base class'da bulunan Metodun ya da özelliğin, derived class (Türetilmiş sınıf ) içinde yeniden düzenlenmesi gerekebilir. İşte bu da, Object Oriented Programming yani Nesne Tabanlı Programlama’nın bir diğer tekniği olan Polymorphism (çok biçimlilik) konusuna giriyor.

Polymorphism konusunu bir başka yazımızda detaylarıyla ele alacağız.

 

 

Bu makalemizin de sonuna gelmiş bulunuyoruz değerli okurlarımız ve değerli arkadaşlarımız.

 

NOT:


Bu makalemizde de gerek yerli gerek yabancı kaynakları tarayarak Programlama dünyasının en önemli konularından ve tekniklerinden olan  OOP (Object-Oriented Programming) yani  Nesne Tabanlı programlama  için örnek bir projede üzerinde Inheritance(Kalıtım / Miras)  tekniğini açıklayan bir yazıyı sizinle paylaşmış olduk.. Bir sonraki makalemizde OOP programlama Tekniklerinden olan Polynorphism (Çok biçimlilik)  konusu üzerinde duracağız. Programlama dünyasının bu büyülü dünyasına adım atan arkadaşlara yol gösterici olması amacıyla faydalı olması dileğiyle. Bir sonraki makalemizde görüşmek dileğiyle şimdilik hoşça kalın.

Saygılarımla;

 

Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net

copyright © Muhammed ÖNAL , 2012 EUL
 

Kaynak:

Türkay Ürkmez OOP,with C#
Dr.Manuel Carcenac OOP with JAVA
Deitel , VB 2010 how to Program

 

 

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 10339izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120152
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65269
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48392
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ