Bölüm 11. Soyut Veri Tipleri ve Kılıflama (sarmalama) Kavramı Abstract Data Types and Encapsulation Concepts

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

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

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

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

1 PROGRAMLAMAYA GİRİŞ

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

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

BTEP243 Ders 3. class Yazım Kuralı:

HSancak Nesne Tabanlı Programlama I Ders Notları

BİL-142 Bilgisayar Programlama II

Nesne Yönelimli Programlama

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

YZM 2116 Veri Yapıları

Java Programlamada Paket Yapısı Ve Import

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

Bölüm 9. Altprogramlar ISBN

Bölüm 10. Altprogramların gerçeklenmesi ISBN

C++ Dersi: Nesne Tabanlı Programlama

Yrd. Doç. Dr. Caner ÖZCAN

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

Programlama Dillerinde Kullanılan Veri Tipleri

YZM 2105 Nesneye Yönelik Programlama

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

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

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

C++ Dersi: Nesne Tabanlı Programlama

Bölüm 9. Altprogramlar ISBN

Pointer Kavramı. Veri Yapıları

NESNE MODELLERİ : SINIFLAR

Kalıtım (Inheritance)

HSancak Nesne Tabanlı Programlama I Ders Notları

Öğr. Gör. Serkan AKSU 1

Bölüm 10. Altprogramları Uygulamak

Erişim konusunda iki taraf vardır:

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

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

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

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

Nesne Yönelimli Programlama

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

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

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

Sunum İçeriği. Programlamaya Giriş

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

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

Ders 6. Bölüm 6: Veri Tipleri (devam)

Bağlama (Binding) Kavramı

C++ Dersi: Nesne Tabanlı Programlama

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

BİL-141 Bilgisayar Programlama I (Java)

Göstericiler (Pointers)

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

Nesneye Dayalı Programlama

Java Dersi. Altuğ Bilgin Altıntaş

Özyineleme (Recursion)

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

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

C++ Dersi: Nesne Tabanlı Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Nesne Yönelimli Programlama

Yrd. Doç. Dr. Caner ÖZCAN

Nesne Tabanlı Programlama

NESNE TABANLI PROGRAMLAMA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

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

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

ALGORİTMA VE PROGRAMLAMA II

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

7. HAFTA. Erişim Belirleyiciler

public static int Toplam int x, int y

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

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

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

YZM 2105 Nesneye Yönelik Programlama

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

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Dizi ( Array ) ve Dizgi ( String )

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

Algoritma ve Akış Diyagramları

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Ders 8: Metotlar. barisgokce.com

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

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

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Veri Yapıları ve Algoritmalar

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

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

PROGRAMLAMAYA GİRİŞ DERS 2

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

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

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

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

C# nedir,.net Framework nedir?

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Transkript:

Bölüm 11 Soyut Veri Tipleri ve Kılıflama (sarmalama) Kavramı Abstract Data Types and Encapsulation Concepts

Soyutlama Kavramı Veri soyutlamasına giriş Bölüm 12 Başlıklarş Soyut Veri Tiplerinin (SVT) (Abstract Data Types) tasarım unsurları Dil örnekleri Parametrize (jenerik) edilmiş i SVT Kılıflama/sarmalama yapıları (encapsulation constructs) Veri bölütlerini i adres, hata düzeltimi, i alındı gibi kontrol bilgileri i ile donatmak Nesneye yönelik programlamada, programcının bilmesi gerekmeyen bir sınıfın özelliklerini ayrı bir dosyaya koyma. Kılıflamayı isimlendirme (Naming Encapsulations ) Tuğrul Yılmaz - Pamukkale Üniversitesi 2

Soyutlama Kavramı Soyutlama, bir şeyin en önemli özellikleri ile görülmesi ve temsil edilmesidir. Programlama ve bilgisayar bilimlerinde soyutlama kavramı önemlidir. Hemen hemen bütün programlama dilleri görev soyutlamasına alt programlar vasıtası ile destek verirler. 1980 sonrası hemen hemen bütün programlama dilleri veri soyutlamasını desteklerler. Tuğrul Yılmaz - Pamukkale Üniversitesi 3

Veri soyutlamasına giriş ş Soyut veri tipi kullanıcı tanımlı veri tipidir aşağıdaki iki özelliğe sahiptir: 1. Söz konusu tip ile elemanlarının gösterimi (betimlemesi) ve üzerlerinde yapılabilecek işlemler tek bir sözdizimsel birim ile tanımlanır. Avantaj: Program organizasyonu, değiştirilebilme il (veri yapısı ile ilgili ili herşey birlikte), parçaların ayrı derlenmesi 2. Bu elemanların gösterimi kullanacak program birimlerinden saklıdır. Bu nedenle bunlara sadece tip tanımlarında verilen işlemler yapılabilir. Avantaj: Güvenilirlik veri gösterimlerinin saklı olması kullanıcı kodunun doğrudan ğ veri elemanlarına erişimini ş engellediği ğ gibi gösterimine bağlı ğ olmamasını da sağlar. Kullanıcı kodu değiştirilmeden veri gösterimi değiştirilebilir. Tuğrul Yılmaz - Pamukkale Üniversitesi 4

Ön tanımlı tipler SVTdir Örneğin Java int tipii Veri soyutlamasına giriş ş Gösterimi saklıdır (iç yapısını bilmenize gerek yoktur) Yapılabilecek işlemler ön tanımlıdır Kullanıcı programları int tipinde değişkenler tanımlayabilirler Kullanıcı tanımlı soyut veri tiplerinin ön tanımlı SVT ile aynı özelliklere sahip olmaları gerekir. Tuğrul Yılmaz - Pamukkale Üniversitesi 5

Tasarım Unsurları SVT destekleyebilmek k için i bir dilde olması gerekli özellikler: 1. Tip tanımını saracak sözdizimsel birim. 2. Tip adlarını ve alt program başlıklarını kullanıcılara açacak, buna karşılık tanımları ve gösterimleri saklayacak yöntem. 3. Bazı temel işlemlerin dilde ön tanımlı olması gerekir (genellikle atama, karşılaştırma) Bazı işlemlere genel olarak gerek duyulur ancak tip tasarımcısı tarafından tanımlanmaları gerekir. Örneğin, döngü, constructors, destructors Tuğrul Yılmaz - Pamukkale Üniversitesi 6

1. Ada Sarmalayan yapı package Dil Örnekleri Package ler genellikle iki kısımdan oluşur: 1. Özellikler kısmı (arayüz (the interface)) 2. Ana paket (Özellikler kısmında listelenen elemanların gerçekleştirimi) Bilgi saklanması (Information Hiding) 1. Saklı tipler özellikler kısmında aşağıdaki gibi tanımlanır: type NODE_TYPE is private; 2. Paketin kullanıcılara görünmeyen kısmında (private ifadesi), daha önceden açıklanan tiplerin özellikleri tanımlanır: package is type NODE_TYPE is private; private type NODE_TYPE is record end record; Tuğrul Yılmaz - Pamukkale Üniversitesi 7

Dil Örnekleri Özellikler kısmı saklı olmayan tipleri de tanımlarının doğrudan private ifadesinden önce konulması ile tanımlayabilir. private tipler için atama ve karşılaştırma ön tanımlı işleçleri (= ve /= )tanımlanmıştır tanımlanmıştır. Limited private tipler için ön tanımlı işleçler yoktur. Tuğrul Yılmaz - Pamukkale Üniversitesi 8

2. C++ Dil Örnekleri C struct t t tipine ve Simula 67 sınıflarına (classes) dayanır class kılıflama aracıdır Bütün sınıf somutlaşan örnekleri (instances) sınıf fonksiyonlarının (metot) tek kopyasını paylaşırlar Her sınıf somutlaşan örneğinin sınıfın veri üyelerinden kendi kopyası vardır somutlaşan örnekler statik, yığıt dinamik veya yığın dinamik olabilirler. Tuğrul Yılmaz - Pamukkale Üniversitesi 9

Dil Örnekleri Bilgi saklama (Information Hiding): Private yantümcesi saklanan elemanlar l içini Public yantümcesi arayüz elemanları için Protected yantümcesi kalıtım (inheritance) için (Bölüm 12) Tuğrul Yılmaz - Pamukkale Üniversitesi 10

Dil Örnekleri Yapıcılar (Constructors): Somutlaşan örneklerin verilerini başlatan fonksiyonlar (bunlar nesne yaratamaz) Yığın dinamik bellek alabilir Nesneleri parametrize etmek için parametreleri olabilir sınıfın somutlaşan örneği yaratılırken örtülü olarak çağrılır Açıkça da çağrılabilir Adı sınıf ın adıyla aynı olmalıdır l Tuğrul Yılmaz - Pamukkale Üniversitesi 11

Yok ediciler (Destructors) Dil Örnekleri Somutlaşan örneğin yaşam süresi biterken genellikle yığın ğ bellekten alınanları geri vermek için kullanılır Örtülü olarak yaşam ş süresi sonunda çağrılır ğ Açıkça da çağrılabilir Adı sınıf adının önüne tilde (~) konmuş şeklidir Tuğrul Yılmaz - Pamukkale Üniversitesi 12

Dil Örnekleri Tuğrul Yılmaz - Pamukkale Üniversitesi 13

Dil Örnekleri Friend fonksiyonları ve sınıfları bazı ilişkisiz birim veya fonksiyonların özel değerlerine ulaşmak için kullanılır. C++ da gerekli C++ SVT desteğinin değerlendirilmesi SVT açısından sınıf lar Ada package yapıları gibi fark: package yapısı bir kılıfken class bir tiptir, ayrıca class sadece veri soyutlaması için tasarlanmamıştır. Tuğrul Yılmaz - Pamukkale Üniversitesi 14

3. Java C++ gibi şu farklaki: ki: Dil Örnekleri Bütün kullanıcı tanımlı tipler class Bütün nesneler yığın bellekten alınıyor ve referans değişkenleri ile erişiliyor class içindeki bütün bireysel öğelerin yantümceler yerine erişimi düzenleyen değiştiricileri (access control modifiers) ( private veya public ) bulunur Java da kapsamı düzenleyen ikinci bir yöntem bulunur, package kapsamı Bir package içinde erişim düzenleyen değiştiricileri olmayan her class içindeki her şey package içinde görünebilir durumdadır (kapsama çevresi) Tuğrul Yılmaz - Pamukkale Üniversitesi 15

Dil Örnekleri Tuğrul Yılmaz - Pamukkale Üniversitesi 16

C# C++ ve Java ya baz alır Dil Örnekleri İki yeni erişim düzenleyici, internal ve protected internal Bütün class somutlaşan örnekleri yığın dinamik (Java gibi) Bütün sınıflar için i varsayılan yapıcılar (constructor) t Yığın bellek nesneleri için çöp toplama kullanıldığından yok ediciler (Destructors) nadiren kullanılıyor structs somutlaşan örneği (inheritance) desteklemeyen zayıf sınıflar Değere göre geçilen tiplerdir Yığıt ğ bellekte tutulurlar t l ( class yığın ğ bellekte) Temel veri tipleri dahil değere göre geçilen bütün tipler structs Veri üyelerine erişim ş için genel çözüm: Erişim ş metotları (veri alanlar ve veri koyanlar) ( get edenler ve set edenler) (getters and setters) Delphi den esinlenmiştir C# alanlar l ve koyanları açıkça metot t çağırmadan ğ özellik olarak düzenlemiştir. Tuğrul Yılmaz - Pamukkale Üniversitesi 17

C# Property Example public class Weather { public int DegreeDays { //** DegreeDays özelliktir get { return degreedays; } set { degreedays = value; } } private int degreedays;... }... Weather w = new Weather(); int degreedaystoday, d olddegreedays; D... w.degreedays = degreedaystoday;... olddegreedays = w.degreedays; Tuğrul Yılmaz - Pamukkale Üniversitesi 18

Dil Örnekleri Alan ve koyan özelliği veriyi public yapmaktan aşağıdaki nedenlerle daha iyidir: Sadece okuma amaçlı erişim sağlanabilir. Alan özellik tanımlanır, koyan özellik tanımlanmaya bilir. Koyan özelliğe bazı sınırlamalar konulabilir. Örneğin konulacak verinin limitleri olacaksa bu tanımlanabilir. Soyutlanmış veri yapısı kullananları l etkilemeden kolaylıkla l kl değiştirilebilir. Tuğrul Yılmaz - Pamukkale Üniversitesi 19

Parametrize Edilmiş SVT SVT parametrize etmek gerekebilir. Örneğin sayısal bir yığıt yaratılmak isteniyor olabilir. Her bir sayısal tip için ayrı ayrı SVT yaratılacağına, bu parametrize edilebilir. 1. Ada Jenerik paketleri Daha önce jenerik yordamları görmüştük; benzer şekilde jenerik paketler de olabilmektedir. Yığıt ın boyunu ve tipini jenerik yaparak yığıt ı esnek yapabiliriz. Tuğrul Yılmaz - Pamukkale Üniversitesi 20

Örnek Program package INT_STACK is new GENERIC_STACK(100, INTEGER); package FLOAT_ STACK is new GENERIC_ STACK(500, FLOAT); Tuğrul Yılmaz - Pamukkale Üniversitesi 21

2. C++ Templated Classes Parametrize Edilmiş ş SVT Sınıflar yapıcı fonksiyona parametre konulmasıyla bir miktar jenerik olabilirler Sınıfın templated class tanımlanmasıyla jenerik yapı elde edilir. stack (int size) { stk_ptr = new int [size]; max_len = size - 1; top = -1; } stack stk(100); Tuğrul Yılmaz - Pamukkale Üniversitesi 22

Parametrize Edilmiş ş SVT Tuğrul Yılmaz - Pamukkale Üniversitesi 23

Parametrize Edilmiş ş SVT Java 50 5.0 C# Jenerik parametreler class olmalıdır. En genel jenerik tipler LinkedList ve ArrayList gibi toplu veri tipleridir 2005 sürümü ile jenerik SVT desteği vermeye başlamıştır. Java 5.0 a benzer. Tuğrul Yılmaz - Pamukkale Üniversitesi 24

Kılıflama/Sarmalama Yapıları SVT tek tipli minimal kılıflama yapısıdır. Çok tipli kılıflama yapılarına büyük programlarda (birkaç bin satırı geçen) gereksinim duyulur. Baştaki güdüleme: Büyük programların iki önemli gereksinimi bulunur: 1. Altprogramlara bölmenin, SVT kullanmanın ötesinde bir organizasyona gidilmesi. 2. Kısmi derleme (derlenen parçaların programın tamamından daha küçük olması, derlemenin değiştirilen parçalarla sınırlandırılması) Çözüm: mantıksal olarak bağlantılı altprogram grupları birlikte ve ayrı olarak derlenir (derleme birimleri) Bunlara kılıflama (encapsulations) )denir. Programları tasarlarken altprogramların mantıksal olarak büyük altprogramlar altında toplamak. Tuğrul Yılmaz - Pamukkale Üniversitesi 25

Kılıflama Yapıları Ada, Fortran 95, Python ve Ruby iç içe altprogramları desteklerler. C C++ Bir veya birden çok altprogram içeren dosyalar bağımsız ğ olarak derlenir. Ara yüzler başlık (header) dosyaları içine konur. Problem: ilişkilendirici (the linker) başlık içindeki tiplerle derlenen dosyadaki tipleri karşılaştıramaz. Cgibi Friend sınıfının özel üyelerine erişim için friend fonksiyonunun eklenmesi. İki sınıfın özel verileri arasında işlem yapılacaksa buna olanak sağlamak amacıyla kullanılır. Tuğrul Yılmaz - Pamukkale Üniversitesi 26

Ada Package yapısı Kılıflama Yapıları İstenen t sayıda veri ve altprogram tanımlaması yapılabilir, sınırlama yok. İki kısımdan oluşur: ş özellikler ve gövde (specification and body). Bu iki kısım bağımsız olarak derlenebilir. C# Assembly (Kurgu, montaj) Tek dinamik bağlanma ile oluşmuş kütüphane veya yürütüme hazır program oluşturan dosyalar. Sınıftan daha büyük bir yapı;.net programlama dilleri tarafından kullanılır. Tuğrul Yılmaz - Pamukkale Üniversitesi 27

Adlandırma Kılıfları (Naming Encapsulations) Büyük programlar bir anlamda bağımsız çalışan birçok geliştirici tarafından yazılırlar. Bu mantıksal birimlerin bağımsız ğ olmasını, bununla birlikte birlikte çalışabilmelerini gerektirir. Büyük programlar birçok global isim tanımlarlar, değişik grupların tanımladığı isimlerin çakışması tehlikesi vardır; bunların mantıksal gruplara bölünmesi gerekebilir. İsimlere yeni bir kapsam yaratmak için Adlandırma Kılıfları kullanılır. C++ Namespace (alan adı) Her kütüphane kendi namespace içinde olabilir ve dışarıdan alan adı ile erişilir. Namespace MyStack { // Stack tanımları } MyStack::topPtr //başka bir paketten kullanımı C# da aynı yapıyı kullanır Tuğrul Yılmaz - Pamukkale Üniversitesi 28

Java Package Adlandırma Kılıfları Birden çok sınıf tanımı içerebilir; bu sınıflar kısmen friend (aynı package içinde ve public ve protected olanlar) olabilirler. package mystack; örneği gibi, tanımlaması dosyanın başında olmalıdır. Kullanıcıları pakette tanımlanan isimlere dışarıdan tam adları ile (mystack.topptr gibi) veya diğer paket başına import mystack.*; komutu eklenmişse sadece değişken ismiyle erişebilirler. Ada Package Paketlerin tanımlama hiyerarşileri dosya hiyerarşileri ile sağlanır. subpack, Pack paketinin alt paketi ise, subpack dosyasının Pack dosyasının durduğu dizinin alt dizininde durması gerekir. Bir program biriminde bir paketin isimlerinin görünebilmesi, o paketin adının with yan tümcesinde geçmesi ile elde edilir: with Ada.Text_IO; Tuğrul Yılmaz - Pamukkale Üniversitesi 29