Bölüm 6. Veri Tipleri ISBN 0-321 49362-1

Benzer belgeler
Bölüm 6. Veri Türleri ISBN

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

Bölüm 6. Veri Tipleri ISBN

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

Bölüm 5. Adlar(Names), Bağlamalar(Binding s),tip Kontrolleri (Type Checking), ve Etki Alanları ( Scopes) ISBN

Bağlama (Binding) Kavramı

Göstericiler (Pointers)

Yrd. Doç. Dr. Caner ÖZCAN

HSancak Nesne Tabanlı Programlama I Ders Notları

Pointer Kavramı. Veri Yapıları

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

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

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

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

Yrd. Doç. Dr. Caner ÖZCAN

Özyineleme (Recursion)

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

Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 5. İsimler, Bağlama, Tür Kontrolü ve Kapsam(Etki Alanı) ISBN

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

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

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

Diziler İndisli Değişkenler

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

PASCAL PROGRAMLAMA DİLİ YAPISI

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

ALGORİTMA VE PROGRAMLAMA II

Nesne Tabanlı Programlama

Pointers (İşaretçiler)

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

PROGRAMLAMAYA GİRİŞ DERS 2

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Nesne Yönelimli Programlama

Yrd. Doç. Dr. Caner ÖZCAN

8. İŞARETCİLER (POINTERS)

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Nesne Tabanlı Programlama

Bölüm 7. İfadeler ve atamalar ISBN

YZM 2105 Nesneye Yönelik Programlama

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

2.2- DEĞİŞKENLER VE SABİTLER ÇALIŞMA YAPRAĞI

BİL1001 Bilgisayar Bilimlerine Giriş 1

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Diziler (Arrays) Çok Boyutlu Diziler

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

JAVADA DİZİ İŞLEMLERİ

Dr. Fatih AY Tel: fatihay@fatihay.net

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

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

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

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Programlama Dilleri III 1

Bölüm 1. Ön Hazırlıklar ISBN

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

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

C++ Dersi: Nesne Tabanlı Programlama

C Programlama Dilinde Değişkenler

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

Programlama Dilleri 3

Bölüm 7. Deyimler ve Atama ifadeleri ISBN

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

C Programlama Dilininin Basit Yapıları

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

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Hafta 13 Fonksiyonlar

D İ Z İ L E R A R R A Y S

Matlab da Dizi ve Matrisler. Mustafa Coşar

Bölüm 8. İfade Seviyesindeki Kontrol Yapıları ISBN

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

Programlama Dilleri 1. Ders 4: Diziler

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

Her veri tipine yetecek ve ancak o kadar anabellek alanı ayrılır. Programcı, ana bellekte ayrılacak adresin büyüklüğünü bilerek değişkenlerini

C#(Sharp) Programlama Dili

DİZİLER-KATARLAR 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:

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

HSancak Nesne Tabanlı Programlama I Ders Notları

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

BÖLÜM 11: YAPISAL VERİ TİPLERİ

PDP 5 Veri Tipleri. İlkel tipler, çoğu programlama dilinde yer alan ve diğer tiplerden oluşmamış veri tiplerini göstermektedir.

Karakter, katar Tipleri (Character, String ) Kullanıcı-tanımlı Sıra Tipleri (Ordinal)

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Transkript:

Bölüm 6 Veri Tipleri ISBN 0-321 49362-1

Bölüm 6 Başlıkları Giriş İlkel Veri Tipleri Karakter String Tipleri Kullanıcı Tanımlı Tipler Dizi Tipleri Birleşmiş Diziler Kayıt Tipleri Küme Tipleri İşaretçi ve Referans Tipleri Wesley. All rights reserved. 1-2

Giriş veri tipi,bir veri nesneleri kolleksiyonunu ve bu nesneler üzerinde daha önceden tanımlanmış olan işlemleri tanımlar. Bir tanımlayıcı(descriptor) bir değişkenin özellikleri kolleksiyonudur. Bir nesne bir kullanıcı tanımlı tipten bir örneği tanımlar. Tüm veri tipleri üzerinde tasarımda düşünülen temel problem bu veri tipleriyle hangi işlemler nasıl yapılacaktır Wesley. All rights reserved. 1-3

İlkel Veri Tipleri(Primitive Data Types) Neredeyse tüm programlama dilleri ilkel veri tiplerini sağlamaktadır. İlkel veri tipleri: Diğer veri tipleri yardımıyla tanımlanamayan tiplerdir. Bazı veri tipleri donanımın bir yansımasıdır. Diğerleri donanım harici desteğe ihtiyaç duyabilir. Wesley. All rights reserved. 1-4

İlkel Veri Tipleri: Tamsayı(Integer) Tüm donanımlarda desteklenen bir tiptir ve karşılığı kolaydır. Bir dilde 8 farklı tamsayı olabilir. Java da işaretli tamsayı boyutları: byte, short, int, long Wesley. All rights reserved. 1-5

İlkel Veri Tipleri:Kayan Noktalı Sayılar( Floating Point) Gerçel sayıları yaklaşıklıklar yardımıyla modeller. Bilimsel hesaplamalarda kullanılan dillerde en az iki noktalı sayı destekler(örn., float ve double; ) Donanım desteği bazen tam olarak vardır IEEE Floating-Point Standard 754 Wesley. All rights reserved. 1-6

İlkel Veri Tipleri: Ondalık(Decimal) İş uygulamalarında (Parasal) COBOL da önemlidir. C# da decimal ver tipi vardır. Belirli sabit sayıda ondalık basamak tutar. Avantaj: doğruluk(accuracy) Dezavantaj: sınırlı aralık, belleği israf eder. Wesley. All rights reserved. 1-7

İlkel Veri Tİpleri: Mantıksal(Boolean) Hepsinin en basitidir. Değerler: iki eleman, biri doğru true ve diğeri yanlış false Bitler ile gerçeklenebilirler,bununla birlikte genellikle byte lar ile gerçeklenirler. Avantaj: okunabilirlik(readability) Wesley. All rights reserved. 1-8

İlkel Veri tipleri: Karakter(Character) Sayısal kodlar ile saklanırlar. En yaygın kodlama: ASCII Alternatif, 16-bit kodlama: Unicode Tüm doğal dillerin karakterlerini barındırır. Java da orijinalinde kullanılıyor. C# ve JavaScript de Unicode u destekliyor. Wesley. All rights reserved. 1-9

Karakter String tipleri Değeri karakter dizisidir. Tasarım konuları: Bir ilkel tip mi olmalıdır yoksa özel bit dizi tipi mi? Stringlerin boyutları durağan mi yoksa değişebilir mi olmalıdır.? Wesley. All rights reserved. 1-10

Karakter string tipleri işlemleri Tipik işlemler: Atama ve kopyalama Karşılaştırma(=, >, etc.) birleştirme Alt string e referans Şablon eşleme Wesley. All rights reserved. 1-11

Belirli dillerde String tipleri C and C++ İlkel değildir char dizileri kullanılır ve işlemler için kütüphane fonksiyonları vardır. SNOBOL4 (bir string işleme dili) İlkel veri tipidir. Birçok işlem hazır vardır. Java String sınıfıyla ilkeldir. Wesley. All rights reserved. 1-12

String uzunluk(length) Seçenekleri Durağan: COBOL, Java nın String sınıfı Sınırlı değişken uzunluk: C and C++ C-temelli dillerde, stringin sonunu gösteren özel bir karakter vardır bu karakter ile eleman sayısı bilinir. Değişkendir(maksimum yoktur.): SNOBOL4, Perl, JavaScript Ada tüm 3 tip uzunluğu desteklemektedir. Wesley. All rights reserved. 1-13

String Tip hesaplama(evaluation) Yazılabilirliğe yardım eder Uzunluk belirli olabilir gerçekleştirim kolaydır. Değişken uzunluk güzeldir fakat pahalı işlemdir. Wesley. All rights reserved. 1-14

String Gerçekleştirimi Durağan uzunluk: derleme zamanı tanımlama Sınırlı dinamik uzunluk: uzunluk için çalışma zamanında tanımlama gerektirir. (C ve C++ da değil) Dinamik uzunluk: çalışma zamanı tanımlama gerektirir;yer ayırma ve bu yeri boşaltma en büyük engeldir. Wesley. All rights reserved. 1-15

Derleme ve Çalışma zamanı tanımlayıcıları Derleme zamanı string uzunluk tanımama Sınırlı dinamik stringler için çalışma zamanı uzunluk belirtme Wesley. All rights reserved. 1-16

Kullanıcı tanımlı tipler Bu tiplerde mümkün değerler aralığı kolaylıkla tamsayılarla ilişkilendirilebilir. Java daki örnekler integer char boolean Wesley. All rights reserved. 1-17

Sayma Tipleri(Enumeration Types) Tüm mümkün değerler adlandırılmış sabitlerdir, tanımlamayla yapılırlar. C# örneği enum days {mon, tue, wed, thu, fri, sat, sun}; Tasarım Konuları Tanımlanan sayma tipi başka yerde tekrar tanımlanıp kullanılabilir mi? Sayma tipleri (enumeration) değeleri sadece integer mi olacak Wesley. All rights reserved. 1-18

Satma tiplerinin Değerlendirilmesi Okunabilirliğe yardım eder.örn., rengi sayı olarak kodlamaya gerek yoktur. Güvenilirliğe yardım eder. örn., derleyici şunları kontrol edebilir. İşlemleri (renklerin toplanması izin vermez) Tanımlandığı aralık dığında değerler atanamaz Ada, C# ve Java 5.0; C++ dan daha iyi sayma tip idesteği verir. Wesley. All rights reserved. 1-19

Alt aralık(subrange) tipleri Sıralı sürekli değer tanımlama Örnek: 12..18 ise tamsayı aralığıdır. Ada nın tasarımı type Days is (mon, tue, wed, thu, fri, sat, sun); subtype Weekdays is Days range mon..fri; subtype Index is Integer range 1..100; Day1: Days; Day2: Weekday; Day2 := Day1; Wesley. All rights reserved. 1-20

Alt aralık değerlendirme Okunabilirliğe yardımcıdır Okuyanlara sınırları belirttiği için değişkenin sadece o aralıkta değer alacağını göstermiş olabilir. Güvenilirlik Aralık dışından değer ataması bir hata olur. Wesley. All rights reserved. 1-21

Kullanıcı tanımlı tiplerin gerçekleştirimi Sayma tipleri(enumeration types) tamsayılar olarak gerçekleştirilirler. Aralık tipleri derleyici tarafından bazı şartlar eklenerek ebeveyn tip gibi gerçekleştirilirler. Wesley. All rights reserved. 1-22

Dizi(array) tipleri Bir dizi aynı tipli veri elemanlarının bir kolleksiyonudur. Her eleman ilk elemanın yerine göre bir indis değeri ile belirlenir. Wesley. All rights reserved. 1-23

Dizi tasarım konuları Alt indisler için hangi tipler uygundur? İndis elemanlarının değerlerinde sınır kontrolü yapılacak mı? İndis aralağı ne zaman sınırlandırılacak? Yer ayırma işlemi ne zaman yapılacak? İndisler için maksimum değer nedir? Dizi ilklenebilecek mi? Herhangi bir tür parça alma mümkün müdür? Wesley. All rights reserved. 1-24

Dizi indisleme İndisler indis elemanları ile dizi elemanlarını birbirlerine eşler. array_name (index_value_list) an element İndis sözdizimi FORTRAN, PL/I, Ada ( ) parantez kullanır Birçok diğer diller [ ] kullanır Wesley. All rights reserved. 1-25

Dizi indis tipleri FORTRAN, C: sadece integer Pascal: integer, Boolean, char, enumeration Ada: integer veya enumeration (Boolean ve char dahil) Java: sadece integer C, C++, Perl, ve Fortran aralık kontrolünü belirtmez Java, ML, C# aralık kontrolünü belirtir. Wesley. All rights reserved. 1-26

İndis bağlama ve dizi kategorileri Durağan: indis ataması durağan ve yer ayırma işlemi (statik) yapılır yani çalışma zamanından önce Avantaj : etkinlik (dinamik yer ayırma işlemi yok) Sabit stack-dinamik: indis aralığı statik olarak stackte sınırlandırılır, fakat yer ayırma işlemi tanımlama zamanında yapılır. Wesley. All rights reserved. 1-27

İndis bağlama ve dizi kategorileri Stack-dinamik: indis aralığı ve yer tahsisis çalışma zamanında yapılır Avantaj : esneklik( dizinin boyutun kullanılıncaya kada r bilinmek zorunda değildir.) Sabit heap-dinamik: sabit stack-dinamik e benzerdir : sağlama işlemi kullanımda yaopılır ve yer tahsiside heapten olur. Wesley. All rights reserved. 1-28

İndis bağlama ve dizi kategorileri Heap-dinamik: indis aralığı ve yer ayırma dinamişk olur ve istenilen zamanda değiştirilebilir. avantaj: esneklik (diziler program çalışması sırasında büyüyebilir veya küçülebilir) Wesley. All rights reserved. 1-29

İndis bağlama ve dizi kategorileri C ve C++ dizilerinde static ifadesi varsa statictir. C ve C++ dizilerinde static ifadesi yoksa sabit stack-dinamiktir. Ada dizileri stack-dinamik olabilir. C ve C++ sabit heap-dynamik diziye izin verir. C# ArrayList bulunur.bu sabit heapdinamik diziye izin verir. Perl ve JavaScript heap-dinamik dizilere izin verir. Wesley. All rights reserved. 1-30

Dizi ilkleme Bazı diller ilklemeye izin verir. C, C++, Java, C# int list [] = {4, 5, 7, 83} C ve C++ da karakter stringleri char name [] = freddie ; C ve C++da string dizileri char *names [] = { Bob, Jake, Joe ]; Java String nesneleri ilkleme String[] names = { Bob, Jake, Joe }; Wesley. All rights reserved. 1-31

Dizi İşlemleri APL vektörler ve matrisler için çok ayrıntılı işlem yeteneğine sahiptir. Ada dizi atamaya izin verir ayrıca dizi birleştirmeye de izin verir. Fortran elemanlar temelinde işlem yapmaya izin verir. Örneği, iki dizi arasındaki + lama işlemi iki dizi elemanlarının karşılıklı eleman çiftlerinin toplanmasını sağlar Wesley. All rights reserved. 1-32

Dikdörtgen ve Dişli Diziler Bir dikdörtgen dizide her satırda aynı sayıda ve her sütunda aynı sayıda eleman vardır. Bir dişli dizide satırlardaki ya da sütundaki elemanların sayıları farklı olabilir. Bunun mümkün olması için çok boyutlu dizilerin dizlerin dizileri gibi görülmesi gereklidir. Wesley. All rights reserved. 1-33

Dilimler(Slices) Bir dilim bir dizinin alt yapısıdır ve referans mekanizmasından başka Bir şey değildir. Dilimler dizi işlemlerinin bulunduğu programlama dillerinde işe yarayan yapılardır. Wesley. All rights reserved. 1-34

Dilim Örnekleri Fortran 95 Integer, Dimension (10) :: Vector Integer, Dimension (3, 3) :: Mat Integer, Dimension (3, 3) :: Cube Vector (3:6)4 elemanlı dizidir. Wesley. All rights reserved. 1-35

Fortran 95 de dilim örnekleri Wesley. All rights reserved. 1-36

Dizilerin gerçekleştirimi Erişim fonksiyonları indis ifadelerini belirli adreslere eşlerler. Tek boyutlu diziler için erişim fonksiyonu: address(list[k]) = address (list[lower_bound]) + ((k-lower_bound) * element_size) Wesley. All rights reserved. 1-37

Çok boyutlu dizilere erişme. İki yaygın yol: Satır birinci sıralama Sütun birinci sıralama (Fortran) Wesley. All rights reserved. 1-38

Çok boyutlu dizilerde bir elemanın yerini tespit etme Genel biçim Location (a[i,j]) = address of a [row_lb,col_lb] + (((I - row_lb) * n) + (j - col_lb)) * element_size Wesley. All rights reserved. 1-39

Derleme Zamanı Tanımlamaları Single-dimensioned array Multi-dimensional array Wesley. All rights reserved. 1-40

İlişkili Diziler Bir birleşmeli dizi verilerin sırasız dizilmiş halidir, indisler ise eleman sayısı kadar anahtar(key) lar tarafından sağlanır. Kullanıcı tanımlı anahtarlar kullanılabilir. Tasarım Konuları: Elemanlara başvuru biçimi nasıl olacaktır. Wesley. All rights reserved. 1-41

Perl de ilişkisel diziler. Adlar % ile başlar; %hi_temps = ("Mon" => 77, "Tue" => 79, Wed => 65, ); İndisleme parantezler ve anahtarlar ile sağlanır. $hi_temps{"wed"} = 83; Elemanlar delete ile silinebilir. delete $hi_temps{"tue"}; Wesley. All rights reserved. 1-42

Kayıt Tipleri Bir kayıt(record) heterojen yapıdaki verilerin birleştirilmiş halidir. Her elemanın kendi tipi ve adı vardır. Tasarım Kavramları: Alanlara erişim sözdizimsel olarak nasıl yapılacak? Wesley. All rights reserved. 1-43

Kayıtların Tanımlanması COBOL seviye nıumaralarını(level numbers) yuvalanmış kayıtları göstermek için kullanır, diğerleri öz yinelemeli fonksiyonlar kullanır. Kayıt Alan referansları 1. COBOL field_name OF record_name_1 OF... OF record_name_n 2. Diğerleri (nokta notasyonu dot notation) record_name_1.record_name_2.... record_name_n.field_name Wesley. All rights reserved. 1-44

COBOL da kayıtların tanımlanması COBOL 01 EMP-REC. 02 EMP-NAME. 05 FIRST PIC X(20). 05 MID PIC X(10). 05 LAST PIC X(20). 02 HOURLY-RATE PIC 99V99. Wesley. All rights reserved. 1-45

Ada da kayıt tiplerinin gösterimi type Emp_Rec_Type is record First: String (1..20); Mid: String (1..10); Last: String (1..20); Hourly_Rate: Float; end record; Emp_Rec: Emp_Rec_Type; Wesley. All rights reserved. 1-46

Kayıtlara Referanslar Birçok dilde nokta notasyonu kullanılır. Emp_Rec.Name Tam nitelendirilmiş kayıtlar tüm kayıt adlarını barındırmalıdır. Wesley. All rights reserved. 1-47

Kayıtlar Üzerindeki İşlemler. Tipler özdeşse atama işlemi Ada kayıtların karşılaştırılması imkanına sahiptir. Ada kayıtları ilklenebilir. COBOL MOVE CORRESPONDING Kaynak alanının içindeki verinin kayıtın iç alanına kopyalanmasına imkan verir. Wesley. All rights reserved. 1-48

Kayıt tiplerinin gerçekleştirimi Her kayıt alanı için, kayıtın başlangıcına göre offset adresleri ilişkilendirilir. Wesley. All rights reserved. 1-49

Birleşik Tipler(Unions Types) Bir union tipinde çalışma zamanında farklı zamanlarda farklı tiplerdeki verilerin kullanılmasına izin verir. Tasarım Konuları Tip kontrolü gerekli olacak mı? Union tipler kayıt tiplerinde kullanılacak mıdır? Wesley. All rights reserved. 1-50

Ada Union Tipleri type Shape is (Circle, Triangle, Rectangle); type Colors is (Red, Green, Blue); type Figure (Form: Shape) is record Filled: Boolean; Color: Colors; case Form is when Circle => Diameter: Float; when Triangle => Leftside, Rightside: Integer; Angle: Float; when Rectangle => Side1, Side2: Integer; end case; end record; Wesley. All rights reserved. 1-51

Ada Union tipi Wesley. All rights reserved. 1-52

Union ların değerlendirilmesi Potansiyel olarak güvensiz yapılardır. Tip kontrolüne izin vermezler. Java and C# union ları desteklemez. Artık programlama dillerinde güvenlik önemlidir. Wesley. All rights reserved. 1-53

İşaretçi ve Referans tipleri (Pointer and Reference Types) Bir işaretçi tipinde bellek adres değerleri ya da özel bir değer olan nil tutulur. Direkt olmayan adresleme imkanı sağlar. Dinamik adres yönetimine imkan tanır. Bir işaretçi dinamik olarak oluşturulan bellek adresine erişim için kullanılır. (genellikle bir heap de) Wesley. All rights reserved. 1-54

İşaretçilerin tasarım konuları Bir işaretçi değişkeninin etki alanı ve yasam süresi ne kadar olacaktır? Bir heap-dinamik değişkenin yaşam süresi ne kadardır? İşaretçiler sadece sınırlandıkları tiplerdeki değişkenleri mi göstermelidir? İşaretçiler dinamik bellek yönetiminde kullanılabilir mi? Dil işaretçi tiplerini, referans tiplerini ya da her ikisinide desteklemelid midir? Wesley. All rights reserved. 1-55

İşaretçi işlemleri İki temel işlem : atrama ve geri havale(dereferencing) Atama işleminde işaretçi dğeişkeninin faydalı bir adresi göstermesi sağlanır. Geri havale ile işaretçinin gösterdiği adresdeki veri değeri alma anlaşılır. C++ da bu işlem * ile yapılır j = *ptr Wesley. All rights reserved. 1-56

İşaretçi Atama işlemi Atama işlemi j = *ptr Wesley. All rights reserved. 1-57

İşaretçiler ile ilgili işlemler İşaretçilerin asılı kalması (tehlikeli) Bir işaretçinin geri alınan bir adres değerini göstermesi, yani programın kendisine ait olmayan bir adresi göstermesi Heap-dinamik bir değişkenin kaybı Heap de ayrılan bir değişken artık program tarafından erişilmez olur. P1 işaretçisi bir heap değişkenini gösterir Daha sonra p1 başka yeni ayrılan bir heap değişkenini gösterir. Wesley. All rights reserved. 1-58

Ada da işaretçiler Dinamik nesneler etki alanı sonunda temizlendiği için yani ayrılan yerin geri alınması otomatik yapıldığı için işaretçiler yanlış adres göstermez. Ada tarafından heap-dinamik değişkenini kaybı problemi çözümlenmemiştir. Wesley. All rights reserved. 1-59

C ve C++ da işaretçiler. Oldukça esnektir fakat dikkatli kullanılmalıdır. İşaretçiler hehangi bir tipi ne zaman oluşturulduğuna bakmaksızın gösterebilir. Dinamik bellek yönetimi ve adreslemede kullanılır. Pointer aritmetiği mümkündür. void * tipi herhangi bir tipi gösterebilir. Wesley. All rights reserved. 1-60

Pointer Arithmetic in C and C++ float stuff[100]; float *p; p = stuff; *(p+5) eşittir stuff[5] ve p[5] *(p+i) eşittir stuff[i] ve p[i] Wesley. All rights reserved. 1-61

Referans Tipleri C++ özel bir işaretçi tipini barındırır. Bu tipe referans tipi (reference type9 denilir. Parametreler için kullanılır. pass-by-reference ve pass-by-value nın avantajlarını sağlar. Java C++ ın referans değişkenlerini genişletmiştir ve tamamının işaretçiler yerine kullanılmasını sağlamıştır. References refer to call instances C# hem Java nın referans tipleri hem de C++ ın işaretçileri vardır. Wesley. All rights reserved. 1-62

İşaretçiler İşaretçiler ve referans tipleri dinamik veri yapıları için mutlaka gereklidir bu yüzden dilde mutlaka olmalıdır. Wesley. All rights reserved. 1-63

İşaretçilerin temsili Büyük bilgisayarlar tek değer kullanır. Intel microprocessors, segment ve offset kullanır. Wesley. All rights reserved. 1-64

Heap Yönetimi Çok karmaşık bir çalışma zamanı işlemidir. Çöpleri temizlemede iki yaklaşım vardır: Referans sayma Çöp Toplama: değişken uzayında ter kalmayınca temizleme Wesley. All rights reserved. 1-65

Referans Sayma Referans Sayma: Her hücre için bu hücreyi gösteren işaretçi sayısını tutan bir sayaç vardır. Dezavantaj: yer gerektirir, çalışma zamanı gerektirir, çalışma zamanı gerektirir Wesley. All rights reserved. 1-66

Çöp Toplama(Garbage Collection) Çalışma zamanında hücrelerden yer ayrılı ve gerekli olduğunda bunları gösteren işaretçiler koparılır, böylece çöp toplama başlar. Her heap hücresinde çöp toplama için fazladan bit vardır. Tüm hücreler başta çöptedir. Heap deki tüm işaretçiler izlenir ve işaretçilerin gösterdikleri çöp değil şeklinde işaretlenir. Tüm çöp hücreler kullanılabilir hücreler listesine eklenir. Dezavantajı: Çok ihtiyaç olursa kötü çalışır yani çok zaman harcanır. Wesley. All rights reserved. 1-67

İşaretleme Algoritması(Marking Algorithm) Wesley. All rights reserved. 1-68