Bölüm 9. Alt Programlar ISBN



Benzer belgeler
Bölüm 9. Altprogramlar ISBN

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

Bölüm 9. Altprogramlar ISBN

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

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

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

Göstericiler (Pointers)

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

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

Bağlama (Binding) Kavramı

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

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

Yrd. Doç. Dr. Caner ÖZCAN

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

Pointer Kavramı. Veri Yapıları

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

HSancak Nesne Tabanlı Programlama I Ders Notları

Bölüm 10. Altprogramları Uygulamak

Yrd. Doç. Dr. Caner ÖZCAN

NESNEYE YÖNELİK PROGRAMLAMA

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

Hafta 13 Fonksiyonlar

Sunum İçeriği. Programlamaya Giriş

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

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

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

BİL-142 Bilgisayar Programlama II

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

1 PROGRAMLAMAYA GİRİŞ

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

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Özyineleme (Recursion)

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

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

Diziler İndisli Değişkenler

Ö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ı:

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

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I

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

NESNEYE YÖNELİK PROGRAMLAMA

Nesne Yönelimli Programlama

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

ALGORİTMA VE PROGRAMLAMA I

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

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

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

YZM 2116 Veri Yapıları

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Öğr. Gör. Serkan AKSU 1

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

BİL-142 Bilgisayar Programlama II

Pointers (İşaretçiler)

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

Diziler (Arrays) Çok Boyutlu Diziler

Ders 8: Metotlar. barisgokce.com

Bölüm 6. Veri Tipleri ISBN

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Bölüm 6. Veri Tipleri ISBN

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

Nesneye Yönelik Programlama (OOP) 7.Hafta

Üst Düzey Programlama

Lambda İfadeleri (Lambda Expressions)

Genel Programlama II

Bölüm1. İlk Bilgiler ISBN

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

Yrd. Doç. Dr. Caner ÖZCAN

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

VERİ TABANI ve YÖNETİMİ

C Programlama Dilininin Basit Yapıları

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

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

11- FONKSİYONLAR (FUNCTIONS)

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

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

C++ Dersi: Nesne Tabanlı Programlama

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Bölüm 5. İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları ISBN

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

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

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

YZM 2105 Nesneye Yönelik Programlama

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

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

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

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

ALT PROGRAMLAR BÖLÜM Giriş Alt Programlar Hakkında Genel Bilgiler

Üst Düzey Programlama

Programlama Dilleri 3

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

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

ALGORİTMA VE PROGRAMLAMA II

Transkript:

Bölüm 9 Alt Programlar ISBN 0-321-49362-1

Bölüm 9 Konular Giriş Alt programların temelleri Alt programların tasarım kouları Yerel başvuru çevreleri Parametre gönderme metotları Alt program adlarının parametre olarak kullanılması Aşırı yüklenmiş alt programlar Genel altprogramlar Fonksiyonlar için tasarım konuları Kullanıcı tanımlı aşırı yüklenmiş operatörler Yardımcı rutinler Wesley. All rights reserved. 1-2

Giriş İki temel soyutlama yeteneği Süreç soyutlama(process abstraction ) İlk başlarda vurgulandı Veri soyutlama(data abstraction) 1980 lerde vurgulandılar. Wesley. All rights reserved. 1-3

Alt programların temelleri Her alt programın tek temel giriş noktası vardır Alt programın çalışması bitene kadar çağıran program durdurulur. Kontrol her zaman,alt program çalışmasını bitirdikten sonra,çağıran programa döner. Wesley. All rights reserved. 1-4

Temel Tanımlamalar Alt program tanımı alt programın arayüzünü tanımlar Bir alt program çağrımı çalışacak olan alt programın kodun içinde açıkça yazılmasıdır. Bir alt program başlığı(header) tanımlamanın ilk kısmıdır, ismini, alt program tipini ve parametrelerini içerir Parametre profilini(yani imzasını signature) içerir. Bu da parametre sayısı, sırası ve parametrelerin tipleridir. Protokol alt programın parame profilleri ve onun geriye dönüş tipidir. Wesley. All rights reserved. 1-5

Temel tanımlamalar C ve C++ da fonksiyon tanımlamalarına genelde prototip (prototypes) denilir. Bir alt program tanımlaması onun gövdesini değil sadece protokolünü içerir. Bir formal parametre alt programın başlığında listelenen ve alt programda kullanılan parametrelerdir. Gerçek parametre fonksiyonun çağrımında kullanılan bellekte yeri adresi olan parametrelerdir. Wesley. All rights reserved. 1-6

Gerçek/Formal parametre uyumu Pozisyonel(Positional) Gerçek parametreler ile formal parametrelerin bağlanması pozisyonel olur: İlk gerçek parametre ilk formal parametre ile eşlenir ve bu şekilde diğerleride yapılır. Güvenli ve etkilidir. Anahtar Kelimeler Gerçek parametre ile hangi formal parametrenin eşleneceği belirtilir. Parametreler herhangi bir sırada olabilir. Wesley. All rights reserved. 1-7

Formal Parametreler Varsayılan Değerler. Bazı dillerde(c++, Ada), formal parametrelerin varsayılan değerleri olabilir (gerçek parametreler atanmamışsa) In C++, default parameters must appear last because parameters are positionally associated C# metotları değişken sayıda parametreyi kabul edebilir. Bunlar aynı tipli olmalıdır. Wesley. All rights reserved. 1-8

Prosedürler ve Fonksiyonlar Altprogramların iki kategorisi olabilir. Prosedürler geriye bir değer döndürmeyen parametreli hesaplama ifadelerinin bulunduğı alt programlardır. Fonksiyonlar yapısal olarak prosedürlerin aynısıdır, metematikteki fonksiyonları modeller ve geriye değer döndürürler. Yan etkilerinin olmaması beklenir ama genelde yan etkileri vardır. Wesley. All rights reserved. 1-9

Alt programların tasarım konuları Hangi parametre geçirme yöntemleri vardır? Parametre tipleri kontrol edilecek mi? Yerel değişkenler static mi yoksa dinamik mi? Alt program tanımlamaları başka alt programlarda görünecek mi? Alt programlar aşırı yüklenecek mi? Alt programlar genel olacak mı? Wesley. All rights reserved. 1-10

Yerel başvuru çevreleri Yerel değişkenler stack dinamik tir. Avantajlar Öz yinelemeye destek Yereller için kullanılan saklama alanı diğer alt programlartarafından da kullanılır. Dez avantajlar Yre tehsis etme(allocation/de-allocation)/ geri alma, ilkleme zamanı Direkt olmayan adresleme Alt programlar tarih duyarlı olmaz yani geçmiş bilgisine sahip değillerdir. Yerel değişkenler static olabilir Daha etkili direkt olmama yoktur Çalışma zamanı aşırı yükleme yoktur Özyineleme desteği yoktur. Wesley. All rights reserved. 1-11

Parametre geçirme yöntemleri Parametrelerin gönderilebilme ya da alt programlardan alınabilme yöntemleri Değer ile gönderme(pass-by-value) Sonuç ile gönderme(pass-by-result) Değer sonuç ile(pass-by-value-result) Referans olarak gönderme(pass-byreference) İsim ile gönderme(pass-by-name) Wesley. All rights reserved. 1-12

Parametre gönderme modelleri Wesley. All rights reserved. 1-13

Değer ile gönderme(pass-by-value) Gerçek parametrenin değeri formal parametreyi ilkleme için kullanılır. Normalde kopyalama ile gerçekleştirilir. Erişim denetimi ile sağlanabilir ama yazma korumasına ihtiyaç duyar(gerçek parametrenin korunması için) Kopyalama kullanıldığında ek saklama yerine ihitiyaç vardır. Saklama ve kopyalama işlemleri yüksek maliyetlidir. Wesley. All rights reserved. 1-14

Sonuç ile gönderme (Pass-by-Result (Out Mode) ) Parametre sonuç olarak gönderildiğinde alt programdan bir değer geriye çevrilmez, uygun gelen formal parametre bir yerel değişkenmiş gibi kullanılır, kontrol alt programı çağırana döndüğünde gerçek parametreye değeri verilir. Saklama ve kopyalama işlemi için ek yere ihitiyaç duyar. Muhtemel problem: sub(p1, p1);geriye döndürülecek olan parametre p1 in mevcut değeri olur. Wesley. All rights reserved. 1-15

Değer Sonuç geriye döndürme(pass-by-value- Result (inout Mode)) Değer ve sonuç olarak döndürmenin kombinasyonudur. Bazen kopya olarak çevirme şeklinde bilinir.(pass-bycopy) Formal parametrelerin yerel saklama yerleri vardır Wesley. All rights reserved. 1-16

Referans olarak çevirme(pass-by-reference (Inout Mode)) Bir erişim yolu(access path) çevirme Ayrıca paylaşarak çevirme adlanır(pass-by-sharing) Gönderme işlemi etkilidir(kopyalama ve ek yere ihtiyaç yok) Dezavantaj Formal parametrelere yavaş erişim İstenmeyen yan etkiler olabilir. İstenmiyen takma isimler Wesley. All rights reserved. 1-17

Ad şeklinde gönderme(pass-by-name (Inout Mode)) Sözcüksel yerine koyma Formaller çağrılma zamanında erişim metotlarında bağlanır fakat gerçek değer adres bağlama işlemi başvuru ya da atama işleminde olur Geç bağlama esnekliğine izin verir. Wesley. All rights reserved. 1-18

Parametrelerin gerçekleştirimi- Gönderme metotları(passing Methods) Bir çok dilde parametre iletişimi çalışma zamanı stack i ile gerçekleştirilir. Referans ile gönderme (Pass-by-reference) gerçekleştirim için oldukça basittir; stack e sadece bir adres konulur. Bir ince fakat ölümcü hata referans ile gönderme ve değer-sonuç olarak değer göndermede görülür: bir sabite karşılık gelen bir formal parametre yanlışlıkla değişebilir. Wesley. All rights reserved. 1-19

Önemli dillerde parametre gönderme metotları Fortran Herzaman in-out şeklindeki model kullanılır. Fortran 77 önce: referans ile gönderme(pass-by-reference) Fortran 77 ve sonra: Skaler değişkenler genellikle değer-sonuç şeklinde gönderilir. C Değer ile gönderme İşaretçiler ile referans ile gönderme C++ Özel bir işaretçi tipi olan reference tipi referans ile gönderme için kullanılır. Java Tüm parametreler değer ile gönderilir. Nesne parametreleri referans ile gönderilir.(aslında referansların değer ile gönderilmesi yapılır). Wesley. All rights reserved. 1-20

Önemli dillerde parametre gönderme metotları Ada Parametre gönderiminde üç model vardır: in, out, in out; in varsayılan modeldir. Formal parametreler out tanımlanmışlarsa atanabilirler fakat referanslanamazlar; in tanımlananlar referanslanabilirler fakat atanamazlar; in out parametreler referanslanabilir ve atanabilir. C# Varsayılan metot: değer ile aktarma Referans ile gönderme formal ve gerçek parametrenin ref ifadesi ile tanımlanması ile yapılır. PHP: C# a oldukça benzer Perl: tüm gerçek parametreler dolaylı olarak daha önceden tanımlı olan @_ işaretli dizi içine yerleştirilir. Wesley. All rights reserved. 1-21

Tip kontrol parametreleri Güvenlik için oldukça önemlidirler. FORTRAN 77 ve orijinal C de yoktur Pascal, FORTRAN 90, Java, ve Ada: her zaman gereklidir. ANSI C ve C++: kullanıcı tarafından seçim yapılır. Prototipler Göreli yeni dillerde Perl, JavaScript, ve PHP tip kontorolüne gerek yoktur. Wesley. All rights reserved. 1-22

Parametre olarak çok boyutlu diziler Eğer çok boyutlu bir dizi bir alt programa gönderilmişse ve alt program ayrı olarak derleniyorsa derleyici tanımlanan bu dizinin boyutunu diziyi tutmak için bilmelidir. Wesley. All rights reserved. 1-23

C ve C++ da çok boyutlu dizilerin parametre olarak gönderilmesi. Programcılar hepsinin boyutunu ilk indis hariç tanımlamalıdır. Esnek alt programlar yazmayı engeller. Çözüm: Diziye bir işaretçinin ve dizi boyutunun başka bir parametre olarak gönderilmesi; kullanıcı bu boyut parametresini kullanmalıdır. Wesley. All rights reserved. 1-24

Pascal ve Ada da çok boyutlu dizilerin parametre olarak kullanılması Pascal Bir problem değildir; tanımlama boyutu dizi tipinin bir alanıdır. Ada Pascal daki gibi kısıtlı diziler Kısıtlı olmayan diziler tanımlanan boyut nesne tanımının bir parçasıdır. Wesley. All rights reserved. 1-25

Fortran da çok boyutlu dizi parametre kullanımı Dizi olan formal parametreler başlıktan sonra tanımlamaya sahiptir. Tek boyutlu dizilerde indis kullanılmayabilir. Çok boyutludiziler için indis değerlerine ihtiyaç vardır. Wesley. All rights reserved. 1-26

Java ve C# da çok boyutlu dizilerin parametre olarak gönderilmesi Ada ya benzer Diziler nesnedir ; hepsi tek boyutludur fakat elemanları başka diziler olabilir. Her dizi içinde length ya da Length gibi dizi boyutunu gösteren adlandırılmış sabitler vardır. Dizi ilk oluşturulduğunda bu değere atama yapılır. Wesley. All rights reserved. 1-27

Parametre gönderme tasarımı İki önemli düşünce Verimlilik(Efficiency) Bir Ya da iki yönlü veri aktarımı Fakat yukarıdaki düşünceler çatışırlar. İyi programlama değişkenlere sınırlı erişime izin verir bu mümkün olan her yerde tek taraflı erişim demektir. Referans ile göndermede büyük boyutlu yapıları göndermede daha verimlidir. Wesley. All rights reserved. 1-28

Alt program isimlerinin parametre olarak gönderilmesi Bazen alt program isimleri parametre olarak gönderilebilir. Konular: 1. Parametrelerde tip kontrolü olacak mı? 2. Parametre olarak gönderilen alt programlar için doğru referanslama nasıl olmalıdır? Wesley. All rights reserved. 1-29

Alt programlarını parametre olarak gönderilmesi C ve C++: fonksiyonlar parametre gibi gönderilemezler fakat fonksiyonlara işaretçiler parametre olarak gönderilebilir.parametreler tip kontrolü yapılır. FORTRAN 95 tip kontrolü yapar. Pascalın sonraki versiyonları ve Ada alt programların parametre olmasına izişn vermez; benzer alternatif Ada da genel (generic) kolaylığı ile sağlanır Wesley. All rights reserved. 1-30

Aşırı yüklenmiş alt programlar Aynı referanslama ortamında metotlar aynı isme sahiplerse aşırı yüklenmişlerdir. Aşırı yüklenen her alt programın protokolü farklıdır. C++, Java, C#, ve Ada da ön tanımlı aşırı yüklü alt programlar içerir. Ada da aşırı yüklenmiş olan fonksiyonun geriye dönüşü ayırt edici olarak kullanılabilir böylece iki fonksiyon aynı parametrelere sahip olabilir. Ada, Java, C++, ve C# kullanıcılara aynı isimli birçok aşırı yüklenmiş alt program yazmaya izin verir. Wesley. All rights reserved. 1-31

Genel Altprogramlar(Generic Subprograms) Bir genel(generic or polymorphic) alt program farklı aktivasyonlardaki farklı değişkenler alabilir. Aşırı yüklenmiş alt programlar anlık çok biçimliliğe izin verir. Alt programda parametrenin tipini belirleyen generic parametre alan alt programlarda parametrik çok şekillilik vardır. Wesley. All rights reserved. 1-32

C++ da bir örnek template <class Type> Type max(type first, Type second) { return first > second? first : second; } Yukarıdaki örnek herhangi bir tip için ilklenebilir. int max (int first, int second) { return first > second? first : second; } Wesley. All rights reserved. 1-33

Fonksiyonlar için tasarım konuları Yan etkilere izin verilecek mi Parametreler yan etkilerin azaltılması için her zaman Ada daki gibi in-mode da mı olmalıdır? Hangi tipteki parametrelere izin verilir? Birçok emirsel dil sınırlı tipteki geriye dönüş tiplerine izin verilir. C diziler ve fonksiyonlar haricindeki diğer tüm tiplere izin verir. C++ da C gibidir fakat ayrıca kullanıcı tanımlı tiplerede izin verir. Ada tüm tiplere izin verir. Java ve C# fonksiyonlara izin vermez fakat metotlar herhangi bir tipe sahip olabilir. Wesley. All rights reserved. 1-34

Kullanıcı tanımlı aşırı yüklü operatörler Ada ve C++ da operatörler aşırı yüklenebilir. Bir Ada örneği Function * (A,B: in Vec_Type): return Integer is Sum: Integer := 0; begin for Index in A range loop Sum := Sum + A(Index) * B(Index) end loop return sum; end * ; c = a * b; -- a, b, and c are of type Vec_Type Wesley. All rights reserved. 1-35

Yardımcı rutinler Bir yardımcı rutin bir alt programdır. Birden fazla girdi vardır ve kendilerini kontrol ederler. Simetrik kontrol adlanır: çağıran(caller) ve çağrılan(called) yardımcı rutinler daha fazla eşit temeldedir. Bir yardımcı rutin çağrımı resume ile yapılır. ilk resume başında yapılır, daha sonrakiler son kalınan yerden itibaren yapılır. Yardımcı rutinler tekrarlı olarak birbirlerini resume eder. Yarı eş zamanlı çalışma(quasi-concurrent execution) sağlarlar. Wesley. All rights reserved. 1-36

Yardımcı rutinler Wesley. All rights reserved. 1-37

Yardımcı rutinler Wesley. All rights reserved. 1-38

Yardımcı rutinler Wesley. All rights reserved. 1-39