Nesneye Dayalı Programlama

Benzer belgeler
Nesneye Dayalı Programlama

Nesneye Dayalı Programlama

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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Nesneye Dayalı Programlama

public static int Toplam int x, int y

Nesneye Dayalı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Java Programlama Güz Dönemi CLASS YAPISI

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

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

Sunum İçeriği. Programlamaya Giriş

Operator Aşırı Yükleme (Operator OverLoading)

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

NESNEYE YÖNELİK PROGRAMLAMA

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

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

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

Nesne Yönelimli Programlama ve Kalıtım

Ders 8 Konu Özeti ve Problemler

C# Console Uygulamaları ifelse Yapıları 2

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

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

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

/*int sayi1, sayi2,toplam=0;

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

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;

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

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

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

BİL-141 Bilgisayar Programlama I (Java)

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

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

11- FONKSİYONLAR (FUNCTIONS)

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

YZM 2105 Nesneye Yönelik Programlama

C# da basit console uygulamaları. C# da basit console uygulamaları

YZM 2105 Nesneye Yönelik Programlama

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

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

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

Lambda İfadeleri (Lambda Expressions)

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

Lecture 11: Generics

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

C++ Dersi: Nesne Tabanlı Programlama

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

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

Programlama Dilleri 3

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

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi

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

BTEP243 Ders 3. class Yazım Kuralı:

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

Akış Konrol Mekanizmaları

OPERATÖRLER Alıştırmalar

Erişim konusunda iki taraf vardır:

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

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

BİL-142 Bilgisayar Programlama II

C++ Dersi: Nesne Tabanlı Programlama

Programlama Dilleri III 1

Ders 8: Metotlar. barisgokce.com

İNTERNET TABANLI PROGRAMLAMA

NESNE TABANLI PROGRAMLAMA

YZM 2105 Nesneye Yönelik Programlama

ALGORİTMA VE PROGRAMLAMA II

Programlama Dillerinde Kullanılan Veri Tipleri

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

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

C#(Sharp) Programlama Dili

YZM 2105 Nesneye Yönelik Programlama

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

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

Programlama Dilleri 3

C# Metotlar ve Metot Tanımlama

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

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.

NESNE TABANLI PROGRAMLAMA Temel Kavramlar

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

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.

Diziler İndisli Değişkenler

Java String İşlemleri

ATATÜRK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM 205 GÖRSEL PROGRAMLAMA GÜZ DÖNEMİ ÖDEV-1

BİL-141 Bilgisayar Programlama I (Java)

YZM 2105 Nesneye Yönelik Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Nesne Yönelimli Programlama

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

Programlama Dilleri 3

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

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

C# Çalışma Örnekleri

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Transkript:

SAKARYA ÜNİVERSİTESİ Nesneye Dayalı Programlama Hafta 3 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" tekniğine uygun olarak hazırlanan bu ders içeriğinin bütün hakları saklıdır. İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. Her hakkı saklıdır 2010 Sakarya Üniversitesi

3.1. Sınıflar Nesneler çevremizde bulunan herşeydir. Araba, uçak, kitap, personel, müdür, fatura, öğrenci gibi. Programcılar her zaman gerçek yaşamdaki durumlara yakın senaryolar oluşturmaya çalışırlar. Bu yöndeki ilk adım bilgisayarın yaşadığımız dünyadan nesnelerle ilişki kurmasını sağlamaktır. Hepimizin bildiği gibi, bilgisayar sadece bir elektronik makinedir. Bilgisayarın bizim bildiğimiz nesneleri tanımasını sağlayacak bilgiyi vermek, bizim sorumluluğumuzdadır. İşte bu noktada nesneye dayalı modelleme tekniği devreye girer. Bu modelde gerçek problemlerde karşılaştığımız nesneleri, bilgisayarda benzer nesneler olarak modelleyebiliriz. Nesneye dayalı programlamanın esasını sınıf (class) oluşturur. Sınıf aynı cins nesnelerin genel tanımıdır. Örneğin kullandığımız araba bir nesnedir (Ford gibi). Aynı şekilde başkalarının da kullandığı Opel, BMW, Mercedes, Renault arabalarının herbiri ayrı birer nesnedir. Bu nesnelerin hepsi araba sınıfı ile tanımlanabilir. Aynı sınıfa ait nesneler ortak özelliklere sahiptir. 3.2. Nesneye dayalı programlama 1. Nesnelerin ortak özelliklerinin sınıf (class) yapıları kullanılarak tanımlanması, 2. Bu sınıfları kullanarak nesnelerin oluşturulması, 3. Bu nesnelerle uygulamaların gerçekleştirilmesi aşamalarından oluşur. Sınıf yeni bir tip veri tanımlar. Bu yeni tip, bu tipte yeni nesneler oluşturmada kullanılır. Bu yüzden sınıf nesne için bir şablondur. Ve bir nesne sınıfın bir örneğidir. Sınıfın Genel Biçimi : Bir sınıf, class anahtar sözcüğü ile tanımlanır. Sınıf içinde değişkenler ve metotlar yer alır. 2

Sınıfı oluşturan kod ve veri, söz konusu sınıfın üyeleri (members) olarak adlandırılır. Sınıf üyeleri: 1. Alan (field): Sınıf tarafından tanımlanan veriler. 2. Özellik (Properties): Sınıf tarafından tanımlanan sınırlandırılmış veya özelleştirilmiş veriler. 3. Metot (Method): Veri üzerindeki operasyonlar. 4. Olaylar (Events): Diğer nesneler için operasyonel yapılar. 5. Temsilciler (Delegates): Olayları oluşturabilmek için gereken kapsüllenmiş yapılar. class sinif_ismi //alan(fields, değişken) tanımlamaları tip degisken1; tip degisken2;. //özellik(properties) tanımlamaları tip ozellik1 get... set... tip ozellik2 get 3

... set... // // metot(method) tanımlamaları tip metot_ismi1 (parametreler) metodun gövdesi.. tip metot_ismi2 (parametreler) metodun gövdesi... Örnek 1: Yamuk geometrik elemanının alanını hesaplayacak bir program geliştireceğiz. Alan = (taban+tavan)/2*yukseklik 4

VS 2010 ortamında Yamuk isimli sınıfı projemize dahil edelim. 5

Bir yamuk nesnesi tarif edebilmek için taban, tavan ve yükseliğe ihtiyaç vardır. Bu elemanları sınıfımıza dahil edelim. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace YamukAlaniHesapla class Yamuk double taban; double tavan; double yukseklik; double türünden tanımladığımız taban, tavan, yüksekli bilgilerine eğer sınıf içersinde değer verirsek yamuk nesnesininden ziyade herseferinde ölçüleri belli bir yamuk tanımı yapılmış olur. Halbuki isteğimiz yamuk nesnesi her oluşumunda kendisini tarif edilebilen değerler alabilmesi olmalıdır. Dolayısıyla Yamuk sınıfının bir örneği (instance) oluştuktan sonra değer verilmelidir. Bir sınıfın bir örneğini oluşturma Nesne oluşturma denir ve new anahtar söcüğü ile olur ve aşağıdaki şekilde tanımlanır. Sinif_ismi degisken_ismi = new Sinif_ismi(); Örneğimizde ise; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace YamukAlaniHesapla class Program static void Main(string[] args) Yamuk y = new Yamuk(); Artık şablonumuz içersinde oluşturduğumuz alanlara değer verebiliriz. Bunun içinde y isimli nesne isminden sonra nokta(.) operatörü kullanılır. 6

Resimden de görüleceği üzere Yamuk sınıfı içersinde oluşturduğumuz alanları (taban, tavan, yükselik) kullanmıyoruz. Halbuki şablonumuzda oluşturabildiğimiz double türünden taban, tavan ve yükseklik değerlerine ulaşabilmeliydik. Bunun nedeni NDP özellikleri olan soyutlama (abstracttion) ve sarmalamadır(encapsulation, bilgi saklama). 7

3.3. Soyutlama Nesne tanımlanırken verinin kulanılması veya veriye erişilmesi için gerekli detayların azaltılması işlemidir. Soyutlama kabaca, iki şekilde yapılır. Bunlar veri (data) ve kontrol (control) soyutlamasıdır. Veri Soyutlaması, veri yapıları üzerinde yapılan soyutlamadır. Kontrol Soyutlaması ise yapısal programlama ile gelen altprogram (subprogram), işlev (function) gibi kavramlar üzerinde yapılan soyutlamadır. Örnek olarak bir "kişi" nesnesinde, kişinin yaşını tutan bir tamsayı değişkeni olan "yas" değişkenini ele alalım. Bu "yas" değişkenine, programın çalıştırma anında, "-10" gibi bir değer atanmasını kimse engelleyemez. İşte burada Nesne Yönelimli Programlamanın getirdiği görünürlük (visibility), ve özellik (property) tanımlama gibi yetenekler kullanarak "yas" değerine gerçek bir değerin girilmesi garanti edilir. İşte buna Veri Soyutlaması adı verilir. Benzer şekilde soyutlama işleminin verileri taşıyan değişkenlerin değil de yöntem (method) veya işlevlerin (function) üzerinde yapılması işlemine Kontrol Soyutlaması adı verilir. Yani yöntem (method) ile yapılan işlemnlerin bir başka nesne tarafından müdahale edilemeyecek hale sokulması işlemidir 1. 3.4. NDP Temel Kavram I: Sarmalama (Encapsulation) Bir nesne üzerinde hem veri soyutlama, hem de kontrol soyutlaması yapılıyor ise buna sarmalama (encapsulation) adı verilir 2. Kodu, veriyi veya nesneyi dış müdahalelerden koruyabilmek, oluşturulma amacı dahilinde kullanabilmek ve kullanılmayacağı yerlerde gösterimini engellemek için sarmalamaya ihtiyaç duyulmuştur. Bir sınıf içinde bulunan üyelerin, o sınıfı kullananlar tarafından erişilip, erişilemeyeceğini belirlemeye yarar. Örnek vermek gerekirse arabamızı çalıştırdıgımızı düşünelim, biz sadece anahtarı yerine sokup çeviriyoruz değil mi, o anda arka planda olan hiç bir işleme karışmıyor ve müdahale edemiyoruz, yani ben anahtarı çevirince o motora giden enerjiyi açıyor, benzini pompalıyor ve buna benzer bir dizi işlemi sırayla yapıyor ama biz bununla ilgilenmiyoruz ve buna erişemiyoruz, işte bu mekanizma bizim erişememiz için kapsüllenmiştir. Aksi taktirde kaputu açıp enerjiyi biz vermeye kalksaydık istenmeyen durumlarla karşılaşabilirdik. Bu çok uç bir örnek oldu farkındayım o yüzden daha basit bir örnek vermek gerekirse hepimiz cep telefonu kullanıyoruz, mesaj yazarken birini ararken tuşlara basıyoruz ama telefonun icindeki devrelere erişmemiz engellenmiştir. Bu işlemi yapabilmemiz için tuş takımı geliştirilmiştir. Yani bu devreler bir nevi kapsüllenmiştir. Sarmalama erişim denetleyicileri ile sağlanmaktadır. 3.5. Erişim Denetleyicileri (Access Modifiers) Diğer sınıfların veya sınıf gruplarının, sınıf yada sınıf üyelerine erişimi düzenleyen/kısıtlayan anahtar kelimelerdir. Pratikte yaygın olarak kullanılan anlayış, bir programcı bir sınıfı (class) oluşturur ve daha sonra diğer programcılar bu class ı kendi kodlarında kullanırlar. Nesneye dayalı programlamanın önemli özelliklerinden bir tanesi olan encapsulation, sınıf değişkenlerine erişimi kısıtlayarak sınıfı oluşturan kişinin sınıfını korumasını sağlamaktadır. Aşağıdaki anahtar sözcükler, metot veya değişkenlere erişimi kısıtlamak veya izin vermek için kullanılırlar. 1 http://tr.wikipedia.org/wiki/soyutlama_(bilgisayar_bilimi) 2 http://tr.wikipedia.org/wiki/sarma_(bilgisayar_bilimleri) 8

Public Private Protected Internal Protected Internal Bu şekilde tanımlanmış bir metot veya değişkene herhangi bir yerden ulaşmak mümkündür. Bu şekilde tanımlanmış bir metot veya değişkene sadece sınıf içinden ulaşmak mümkündür. Bu şekilde tanımlanmış bir metot veya değişkene tanımlandıkları sınıftan veya bu sınıftan türetilmiş sınıflardan ulaşılabilir. Bu şekilde tanımlanmış bir metot veya değişkene tanımlandıkları sınıftan ve tanımlandıkları sınıfla aynı assembly de olan sınıflardan ulaşmak mümkündür. (C# a ait anahtar kelimedir.) Bu şekilde tanımlanmış bir metot veya değişken hem protected hem de Internal özelliğindedir. (C# a ait anahtar kelimedir.) Bu noktada unutlamaması gereken 5 husus vardır: 1. İşletim sistemleri bir tipin public, protected yada private olmasıyla ilgilenmez. Dolayısıyla hafıza takibi ile üyelerin değerlerine ulaşılabilmektedir. 2. Her programcı kendi yazdığı sınıfın güvenliğinden ve güvenirliğinden sorumludur. Eğer herhangi bir sınıf üyesinin private ile tanımlanması yeterli olduğu halde public ile dış dünyaya açılırsa programcılar bu üyeyi istedikleri gibi kullanılabilirler. Bu durum NDP nin soyutlama prensibine aykırıdır. 3. Her dilin kabul ettiği default değerleri farklıdır. C# private, Java public olarak kabul etmektedir. Ancak programın okunabilirliği açısından erişim denetleyicilerin default değeri her ne olursa olsun belirtilmesi tavsiye edilmektedir. 4. Sınıf üyelerinden alanların public ile sınıf dışına açılması önerilmemektedir. (Sınıf üyelerinden özellikler konusunda açıklanacaktır.) 5. Bir sınıfın kendisinin private olarak tanımlanmasının hiç bir anlamı yoktur. Dolayısıyla derleyiciler hata vermektedir. Erişim denetliyicileri ile Yamuk sınıfını tekrar düzenlersek; public class Yamuk public double taban; public double tavan; public double yukseklik; haline gelecektir. Main kodlarımız ise; class Program static void Main(string[] args) Yamuk y = new Yamuk(); y.taban = 5; y.tavan = 6; y.yukseklik = 8; double alan = (y.taban + y.tavan) / 2 * y.yukseklik; Console.WriteLine(alan); 9

Console.ReadLine(); F5 ile programı çalıştırdığımızda ekrana 44 sonucunu verecektir. İkinci bir yamuk nesnemizi oluşturarak sonuçları ekrana yazdıralım. class Program static void Main(string[] args) // y isimli yamuk nesnesini oluşturma Yamuk y = new Yamuk(); // y isimli yamuk nesnesine değerler atama y.taban = 5; y.tavan = 6; y.yukseklik = 8; // y yamuğunun alanı hesaplanır double alan = (y.taban + y.tavan) / 2 * y.yukseklik; // y yamuğunu ekrana yazdırır Console.WriteLine("Y: " + alan); // x isimli yamuk nesnesini oluşturma Yamuk x = new Yamuk(); // x isimli yamuk nesnesine değerler atama x.taban = 3; x.tavan = 4; x.yukseklik = 5; // x yamuğunun alanı hesaplanır double alan2 = (x.taban + x.tavan) / 2 * x.yukseklik; // x yamuğunu ekrana yazdırır Console.WriteLine("X: " + alan2); 10

3.6. Partial Anahtar kelimesi Bir tipe ait kodun birden fazla dosyaya yazılabilmesi özelliğidir. Sadece C# ait bir anahtar kelimedir. Örnek 2: Öğrencilerin ad, soyad, doğum tarihi, memleketi, öğrenci numarası, bölümü, fakültesi bilgilerini tutan sınıfı oluşturalım. VS 2010 da yeni bir proje açıp adını PartialClassOrnegi olarak değiştirelim. Ogrenci isimli sınıfımızı ekleyelim. Ogrenci.cs kodları; partial class Ogrenci public string adi; public string soyadi; public DateTime dogumtarihi; public string memleket; Program.cs sınıfında partial class ile Ogrenci sınıfının devamını yazabiliriz. 11

Program.cs kodları; // Ogrenci sınıfının devam eden kodları partial class Ogrenci public string numara; public string bolum; public string fakulte; class Program static void Main(string[] args) // o1 isimli ilk öğrenci nesnesi oluşturuluyor Ogrenci o1 = new Ogrenci(); //o1 nesnesine değerleri atanıyor o1.adi = "Barış"; o1.soyadi = "Çalışkan"; o1.dogumtarihi=new DateTime (1981, 3, 1, 7, 0, 0); o1.memleket = "Sakarya"; o1.numara = "0001.10001"; o1.bolum = "Bilgisayar Mühendisliği"; o1.fakulte = "Mühendislik"; 12

//o1 nesnesi ekrana yazdırılıyor Console.WriteLine("Adı : " + o1.adi); Console.WriteLine("Soyadı : " + o1.soyadi); Console.WriteLine ("Doğum Tarihi : " + o1.dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + o1.memleket); Console.WriteLine("Numarası : " + o1.numara); Console.WriteLine("Fakültesi : " + o1.fakulte); Console.WriteLine("Bölümü : " + o1.bolum); Console.WriteLine(); Console.WriteLine("********************************************************"); Console.WriteLine(); // o2 isimli ikinci öğrenci nesnesi oluşturuluyor Ogrenci o2 = new Ogrenci(); //o2 nesnesine değerleri atanıyor o2.adi = "Ahmet"; o2.soyadi = "Şanslı"; o2.dogumtarihi = new DateTime(1983, 7, 19, 7, 0, 0); o2.memleket = "Sakarya"; o2.numara = "0101.10001"; o2.bolum = "Bilgisayar Mühendisliği"; o2.fakulte = "Mühendislik"; //o2 nesnesi ekrana yazdırılıyor Console.WriteLine("Adı : " + o2.adi); Console.WriteLine("Soyadı : " + o2.soyadi); Console.WriteLine("Doğum Tarihi : " + o2.dogumtarihi.toshortdatestring()); Console.WriteLine("Memleket : " + o2.memleket); Console.WriteLine("Numarası : " + o2.numara); Console.WriteLine("Fakültesi : " + o2.fakulte); Console.WriteLine("Bölümü : " + o2.bolum); 13