Ders 8 Konu Özeti ve Problemler

Benzer belgeler
public static int Toplam int x, int y

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

BİL-141 Bilgisayar Programlama I (Java)

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

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

Kalıtım (Inheritance)

Erişim konusunda iki taraf vardır:

Nesne Yönelimli Programlama ve Kalıtım

YZM 2105 Nesneye Yönelik Programlama

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

Nesne Yönelimli Programlama

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.

Nesneye Dayalı Programlama

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

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

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

YZM 2105 Nesneye Yönelik Programlama

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

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

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

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

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Veritabanı İşlemleri

NESNE TABANLI PROGRAMLAMA

1. SINIFLAR Sınıf (Class) Mantığı

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

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

Nesne Yönelimli Programlama

3. NESNE TABANLI PROGRAMLAMANIN PRENSİPLERİ

7. HAFTA. Erişim Belirleyiciler

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

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

YZM 2105 Nesneye Yönelik Programlama

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

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

HSancak Nesne Tabanlı Programlama I Ders Notları

İç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.

YZM 2105 Nesneye Yönelik Programlama

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

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

Java Dersi. Altuğ Bilgin Altıntaş

BİL-142 Bilgisayar Programlama II

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

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

1 PROGRAMLAMAYA GİRİŞ

Sunum İçeriği. Programlamaya Giriş

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Nesneye Dayalı Programlama

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

Programlama Dilleri III 1

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

Bölüm 12. Nesne yönelimli programlama desteği

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

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

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

C++ Dersi: Nesne Tabanlı Programlama

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

Nesne Tabanlı Programlama. Ders Notları

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

C# Metotlar ve Metot Tanımlama

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

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

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

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

COĞRAFİ BİLGİ SİSTEMLERİ İLERİ SEVİYE EĞİTİMLERİ BUILDING GEODATABASE EĞİTİMİ

Nesne Yönelimli Programlama

Sınıf Nesne Kavramları C# Bileşenleri Özellikler, Olaylar, Metotlar

COĞRAFİ BİLGİ SİSTEMLERİ İLERİ SEVİYE EĞİTİMLERİ BUILDING GEODATABASE EĞİTİMİ

İş Parçacıkları Thread(s)

CBÜ Teknoloji Fakültesi, Yazılım Mühendisliği. Nesneye Yönelik Programlama

Nesneye Dayalı Programlama

Şekil 1 de dört adet genel kullanıma açılmış veri (D1-D4) ve bunları doğrudan ya da dolaylı olarak kullanan 7 adet yordam (P1-P7) yer almaktadır.

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

YZM 2105 Nesneye Yönelik Programlama

Görsel Programlama-I (Visual Programming) 1.Hafta

ELN1001 BİLGİSAYAR PROGRAMLAMA I

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

Nesneye Dayalı Programlama

Programlama Dillerinde Kullanılan Veri Tipleri

11- FONKSİYONLAR (FUNCTIONS)

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

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

YZM 2105 Nesneye Yönelik Programlama

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

BMH-303 Nesneye Yönelik Programlama

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

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

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

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

Lambda İfadeleri (Lambda Expressions)

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

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

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

C++ Dersi: Nesne Tabanlı Programlama

Transkript:

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 özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklayabilme yeteneği olarak Örnek olarak.net Framework temel sınıf kütüphanesi içerisinde yer alan ve Open() ve Close() metotlarına sahip SqlConnection sınıfını ele alalım. //SqlConnection, veritabanına yapılan bağlantının detaylarını kapsüllemektedir. SqlConnection baglanti = new SqlConnection("server = London; database = AdventureWorks; integrated security = true"); baglanti.open(); //Burada veri yönetilir. baglanti.close(); SqlConnection sınıfı, veritabanına açılan bağlantının sağlanması, yüklenmesi, yönetimi, kapanması gibi içsel detayları gizlemiştir. Nesne kullanıcısı kapsüllemeyi sever; çünkü programlama görevlerini daha kolay hale getirir. SqlConnection sınıfında olduğu gibi, nesnenin görevini yerine getirmesi için arka tarafta çalışan onlarca satır kodu düşünmeye gerek yoktur. Tek yapılması gereken nesne örneğinin oluşturulması ve uygun metotların çağrılmasıdır. Kapsüllemenin diğer bir işlevi ise veri korumadır. Bir sınıf tasarımında doğru olan, nesnelerin durum verilerini private erişim belirleyicisi ile koruma altına almaktır. Bu yolla dış dünya, alanın değerini elde etmek ya da değiştirmek istediğinde bir kontrolden geçmek zorunda kalır. Dış dünyaya açık, yani public erişim belirleyicisine sahip alanların sorunu, ait oldukları sınıfın iş mantıklarını algılayabilme yeteneklerinin olmamasıdır. Dolayısıyla atanan değerin iş mantığına (business logic) uygun olup olmadığına dair herhangi bir kontrolün sınıf içerisinde yapılabilmesi mümkün olmamaktadır. Nesne kullanıcısı genelde sınıfı yazan kişi olmakla birlikte harici birisi de olabilir; dolayısıyla böyle bir kontrolü nesne kullanıcısı tarafında yapmak akla gelse de ; bu çok efektif bir yol olmaz. Sınıfların durum verileri olarak anılan alanlar, private erişim belirleyicisi alarak dış dünyaya kapatıldıklarında başlangıç değerleri, sınıf içerisinde tanımlandığı yerde ya da yapıcı metot yardımıyla verilebilir. Böyle bir kapsülleme tercih edilebilir; ancak bazı durumlarda alanın değerinin dışardan okunması, değerinin sadece içsel olarak sınıf üyeleri tarafından atanması, durum verileri üzerinde yapılacak değişikliklerin dışarıya açılması gerekebilir. Burada değişiklikle birlikte gelen verinin kontrol edilerek istenmeyen durumların önüne geçilmesi gerekliliği ortadadır. Kapsülleme, durum verilerinin tutarlılığını sağlamak için bir yol sunmaktadır: public eirşim belirleyicisine sahip alanlar tanımlamaktansa, alan verilerini private olarak tanımlamak alışkanlık haline getirilmelidir (Herhangi bir iş kuralı olmasa da). Bu durumda alanlar nesne kullanıcısına iki teknikle açılabilir: - Nesne yönelimli diğer diller için geleneksel yol olan Erişen ve Değiştiren (Accessor and Mutator) metotlar tanımlamak. - Bir özellik (property) tanımlamak. 1

Hangi teknik kullanılırsa kullanılsın iyi kapsüllenmiş bir sınıf, ham verisini (yani alanlarını) ve onu nasıl yönettiğinin ayrıntılarını dış dünyanın kem gözlerinden gizlemelidir. Bu yaklaşımın güzel ve faydalı olan yanı, sınıfı yazan kişinin, çalışan kodu bozmadan kapalı kapılar ardında metodun ya da özelliğin uygulanışını değiştirmekte serbest olmasıdır..net Framework temel sınıf kütüphanesi, geleneksel Erişen/Belirleyen metotlar yerine tip özelliklerini tercih eder. Bu yüzden sınıf kütüphanesi ile sağlıklı bir şekilde etkileşen programlar için kendi tiplerimizi yazarken özelliklerden faydalanmak doğru bir davranış olacaktır. Ayrıca özelliklerin bir alanın değerini işaret edip alana değer atamaları zorunlu değildir. Bir alan olmadan da özelliklerden faydalanılabilir. Kalıtım (Inheritance) Kapsüllenmiş bir sınıf geliştirmeyi analiz ettikten sonra, şimdi sıra birbirleriyle ilişkili sınıf aileleri oluşturmaya geldi. Nesne yönelimli programlamanın ikinci prensibi olan kalıtım (inheritance), dilin varolan sınıf tanımlamalarının üzerine yeni bir sınıf tanımlaması inşa edilmesine izin verme yeteneği olarak Kalıtım, bir türetilen sınıfın (base class ya da parent class) özellik ve davranışlarını, bir alt sınıfın miras alarak sanki kendi üyeleriymiş gibi kullanmasıdır. Yukarıdaki şekil, şöyle yorumlanabilir: Kare bir şekildir, şekil ise bir object dir. Sınıflar arasında bu tarz bir ilişki oluşturulduğu zaman, tipler arasında bir bağlılık inşa edilmiş olur. Kalıtım fikrinin altında yatan en basit fikir, yeni sınıfın varolan bir sınıfın fonksiyonelliklerine sahip olması ve muhtemelen genişletmesidir. Kalıtım konusu ile ilgili belirtilmesi gereken bir ayrıntı vardır:.net dünyasında her tip, eninde sonunda ortak bir temel sınıftan (base class) türer: System.Object. Object sınıfı,.net ekosisteminde yer alan bütün tipler tarafından desteklenen üyeler kümesini tanımlamaktadır. Herhangi bir temel sınıf belirtmeden tanımlanan bir sınıf, bilinçsizce Object sınıfından türer. Kalıtıma başvurmak için şu iki sebepten birisi olmalı : (1) Var olan bir tipe yeni fonksiyonellikler eklenmek istendiğinde. (2)Birbiriyle ilişkili sınıfların birçok ortak üyesi bulunması durumunda. Kalıtımın uygulandığı yerde, bir temel sınıftan türeyen sınıflar, bütün temel sınıf üyelerini miras alırlar..net Framework içerisinde örnek vermek gerekirse System.Windows.Forms.Control sınıfı, kendi yazacağımız bir windows kontrolünün ve System.Windows.Forms.Button, System.Windows.Forms.TextBox gibi var olan windows kontrollerinin temel sınıfı olarak kullanılmaktadır. Altı çizilmesi gereken bir diğer ayrıntı ise şudur: Kalıtım, kapsüllemeyi korur. Dolayısıyla türeyen sınıflar, temel sınıfın private erişim belirleyicisine sahip üyelerine erişemezler. Temel sınıflar (base classes) hakkında konuşmak gerekirse C# da, bir sınıf direk olarak sadece tek bir temel sınıfa sahip olabilir. Dolayısıyla tek bir tipin, birden fazla temel sınıfının olması mümkün değildir. Buna karşın C#, bir sınıfın istenilen sayıda arayüzü (interface) uygulamasına izin vermektedir. Yani C# da çoklu kalıtım (multiple inheritance) ancak arayüzler (interface) ile sağlanabilir. Örnek: using System; 2

public class Atasınıf public Atasınıf() Console.WriteLine("ata kurucu"); public void Yaz() Console.WriteLine("ben ata sınıfındanım"); public class OğulSınıf: Atasınıf public OğulSınıf() Console.WriteLine("Oğul kurucu"); class Program static void Main(string[] args) OğulSınıf oğul =new OğulSınıf(); oğul.yaz(); Çok Biçimlilik (Polymorphism) Nesne yönelimli programlamanın son prensibi, çok biçimlilik (polymorphism) olarak adlandırılır ve şu soruya cevap verir: Türeyen sınıflar, temel sınıfta yer alan bir üyeyi nasıl farklı şekillerde uygulayacaklardır? Çok biçimlilik, temel sınıfta yer alan bir üyenin (metot, özellik, indeksleyici ya da olay), türeyen sınıf tarafından nasıl değiştirileceğine dair bir yol sunmaktadır. Bu yoldan ilerlemek için öncelikle virtual ve override anahtar kelimelerinin çalışma mekanizmalarının anlaşılması gerekmektedir. Bir temel sınıf, tanımlayacağı üyenin uygulanışının -yani içerisindeki kodların-, kendisinden türeyen sınıflar tarafından değiştirilebilmesini istiyorsa bu üye virtual anahtar kelimesi ile işaretlenmelidir. Türeyen bir sınıf, virtual anahtar kelimesi ile işaretlenmiş bir üyenin uygulanışını kendi sınıfına ait bir iş mantığıyla değiştirmek isteyebilir; ancak zorunda değildir. Üyenin başına override anahtar kelimesi yazılarak yeniden kodlanması ile böyle bir değişiklik mümkün olmaktadır. Ayrıca ezilen (overriden) her üye, ihtiyaç duyulması halinde temel sınıfta yer alan uygulanışı yeniden çağırmakta serbesttir: Kod içerisinde istenen herhangi bir yerde temel sınıfın bir üyesi base anahtar kelimesi ile çağrılabilir. Örnek: using System; 3

public class Çizici public virtual void Çiz() Console.WriteLine("çizici"); public class DoğruÇiz: Çizici public override void Çiz() Console.WriteLine("Line"); public class DaireÇiz:Çizici public override void Çiz() Console.WriteLine("Circle"); public class Program static void Main(string[] args) Çizici[] birçizici=new Çizici[3]; birçizici[0]=new DoğruÇiz(); birçizici[1]=new DaireÇiz(); birçizici[2]=new Çizici(); foreach(çizici sayac in birçizici) sayac.çiz(); 5. Kalıtım (Inheritance ): d) Temel işlevi veri korumadır. 6. Çok biçimlilik (Polymorphism) : d) Temel işlevi veri korumadır 4

7. Kapsülleme (Encapsulation): d) Dilin varolan sınıf tanımlamalarının üzerine yeni bir sınıf tanımlaması inşa edilmesine izin verme yeteneği olarak 5