İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları

Slides:



Advertisements
Benzer bir sunumlar
STRİNG FONKSİYONLARI.
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
JAVASCRİPT VERİ TÜRLERİ
JavaScript Birinci Hafta.
Göstericiler (Pointers)
Zeynep Çelik Sunar….
C Programlama Diline Giriş
Bölüm 5 Adlar(Names), İlişkilendirmeler(Bindings), Tip Kontrolü(Type Checking), ve Kapsamlar(Scopes)
İfadeler ve Atama İfadeleri
Altprogramların Uygulanması
Değişken Bildirimleri
Bölüm 4 – Kontrol İfadeleri:1.kısım
SQL de Değişken Tanımlama
Dizi (array) değişkenleri
String Kütüphanesindeki Arama Fonksiyonları
Karar ifadeleri ve Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Nesneye Yönelik Programlama
Nesne Tabanlı Programlama
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
SQL de Değişken Tanımlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Görsel C# Programlama Güz 2009 (6. Hafta).
C ile Programlamaya Giriş
DEĞİŞKENLER, VERİ TÜRLERİ VE OPERATÖRLER
Metotlar.
FONKSİYONLAR.
DEĞİŞKENLER VE VERİ TİPLERİ
Önceki Dersi Hatırlama !!
Kalıtım , Sınıf Asli Ergün.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
JAVA’DA DİZİLER Dr.Galip AYDIN.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
İsimler ve Bağlanma Names and Bindings
Bölüm 5: Adlar, Bağlama, Tip Kontrolü ve Kapsamlar
Bölüm 9: Alt Programları Uygulamak
Fonksiyonlar.
Amaçlar Assembly dilinin genel özelliklerini tanımak
Programlama Dillerinin Prensipleri
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
KALITIM(INHERITANCE) Öğr.Gör. Murat ASLANYÜREK. KALITIM KAVRAMINA GİRİŞ  Kalıtım, sınıflardan yeni sınıflar türetmeyi sağlar.  Türetilen yeni sınıflar,
Değişkenler Sabitler İşlemciler İfadeler Deyimler 1 Programlama Dillerinin Temel Elemanları (Hafta5) BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
Bağlama ve Kapsam Kavramları
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Fonksiyonlar ve Diziler
C Programlama Dili Bilgisayar Mühendisliği.
Programlama Dillerinin Temel Elemanları
Excel’de VBA Programlama (Visual Basic Application)
Bölüm 9 Altprogramlar.
Bölüm 6 Veri Tipleri.
Soyut veri tipleri ve kapsülleme kavramları
YAPISAL PROGRAMLAMA Hafta-6
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Bölüm 7 İfadeler ve atamalar.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
C++ Programming:. Program Design Including
Bilgisayar Bilimi Problem Çözme Süreci-2.
YAPISAL PROGRAMLAMA Hafta-7
Altprogramların gerçeklenmesi
ALGORİTMALAR VE PROGRAMLAMAYA GİRİŞ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

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

5. bölüm konuları Giriş İsimler Değişkenler Bağlama kavramı Tip kontrolü Kuvvetli tipleme Tip Eşdeğerliği Etki alanı (Scope) Etki alanı ve ömür Referans Çevreleri (Referencing Environments) İsimli Sabitler Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Giriş Komutlu diller von Neumann mimarisinin soyutlanmış halidir Hafıza İşlemci Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsimler Tasarım problemi: Büyük harf – küçük harf farkeder mi? Özel kelimeler “ayrılmış” mı yoksa “anahtar kelime” mi? Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsimler… Uzunluk Çok kısa ise anlamlı olmaz Örnekler: FORTRAN I: en fazla 6 COBOL: en fazla 30 C#, Ada, and Java: sınır yok, tüm karakterler önemli C++: sınır yok, ama pratikte var Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsimler… Büyük-küçük hassasiyeti Dezavantaj: okunabilirlik (benzer görünen isimler gerçekte farklı) C-tabanlı dillerde büyük-küçük hassasiyeti var. Diğerlerinde yok. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsimler… Özel kelimeler Anahtar kelime: sadece bazi yerlerde özel, başka yerde : kullanıcı-tarafından tanımlanmış isim olarak kullanılabilir, ör. Fortran’da Real VarName (Real veritipi), Real = 3.4 (Real değişken) Ayrılmış kelime : kullanıcı-tarafından tanımlanmış isim olarak kullanılamaz (If, while vs.) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değişkenler Bir değişken bir hafıza hücresinin soyut halidir Değişkenlerin altı özelliği bulunur Adı Addresi Değeri Tipi Ömrü Etki alanı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değişken özellikleri İsim – her değişkenin adı olmayabilir Adres – değişkenin ilişkili olduğu hafıza adresi Bir değişkenin (x, y, z vs.) değişik zamanlarda değişik adresleri olabilir. Bir değişkenin programın değişik yerlerinde değişik adresleri olabilir. İki değişken ismi ayni hafiza hücresini gösteriyorsa, bu iki değişken birbirinin takma adıdır (alias). Takma adlar işaretçilerle ve referans değişkenleri ile yaratılırlar Takma adlar okunabilirliğe zarar verir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değişken özellikleri... Tip – değişkenin hangi değerleri alabileceğini ve tip değerleri üzerinde hangi operasyonalrın tanımladığını belirler, dolayısı ile değişkenin hangi operasyonların içinde yer alabileceğini belirler. Değer – değişkenin ilişkili olduğu adresteki değer. - Değişkenin sol-değeri = değişkenin ilişkili olduğu - Değişkenin sağ-değeri = değişkenin değeri Soyut hafıza hücresi: değişkenin ilişkili olduğu adrestedki bir veya daha çok fiziki hücre (ör: integer 4 bayt yer tutar) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Bağlama Kavramı Bağlama bir ilişkilendirmedir. Örnek: işlem ile sembol (toplama ile + gibi) vs. Bağlama zamanı bağlamanın gerçekleştiği zamandır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Olabilecek Bağlama Zamanları Dil tasarım zamanı-- ör: operatör sembollerının işlemlere bağlanması Dil gerçeklenmesi zamanı: -- ör: kayan nokta tipinin belli bir temsil şekline bağlanması Derleme zamanı – ör: C dilinde bir değişkenin bir tipe bağlanması Yükleme zamanı– ör: C static değikeninin bir hafıza hücresine bağlanması Çalışma zamanı – statik olmayan lokal değişkenlerin bir hafıza hücresine bağlanması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Statik ve Dinamik Bağlama Bağlama, eğer çalışma öncesi gerçekleşirse va çalışma süresince değişmezse, buna statik bağlama denir. Bağlama, eğer ilk kez çalışma esnasında gerçekleşirse, veya çalışma esnasında değişebilirse, buna dinamik bağlama denir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Tip Bağlaması Tipler ne şekilde belirtilir? Bağlama ne zaman gerçeklesir? (statik-dinamik) Statik ise, açık (explicit) veya kapalı (implicit) sekilde tip belirtilebilir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Açıkça/üstü kapalı Deklarasyon Açıkça deklarasyon değişkenlerin tipini deklare etmek için kullanılan bir ifadedir (ör: int x) Üstü kapalı deklarasyon otomatik olarak ilk kullanıldıkları yerde tipini belirlemekdir (ör: y=6.3) FORTRAN, PL/I, BASIC, ve Perl’de üstü kapalı Deklarasyon vardır Avantaj: Yazma kolaylığı Dezavantaj: güvenirlik Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Dinamik tip bağlama Örneğin JavaScript and PHP’de var Atama komutu ile belirtilir. list = [2, 4.33, 6, 8]; list = 17.3; Avantaj: esneklik Dezavantajlar: Yüksek maliyet (dinamik tip kontrolü) Derleyiçinin tip kontrolü yapması zor Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Tip çıkarımı Kullanıldığı dillerden bazıları: ML, Miranda, and Haskell Açık deklarasyona ihtiyaç yok. Tipler kullanım şeklinden yola çıkarak derleyici tarafından otomatik olarak bulunur. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değişken özellikleri... Depolama Bağlamaları ve Ömür Yer alma (allocation) - hafıza hücreleri havuzundan hüce alma Yer verme (deallocation) – alınan hücreyi havuza geri verme Bir değişkenin ömrü bir hafıza hücresine bağlı olduğu zaman süresidir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Ömür açısından değişken kategorileri Statik—program çalışmaya başlamadan hafıza hücrelerine bağlanır ve program çalışması süresince ayni hücreye bağlı kalır. Ör: C ve C++ static değişkenleri Avantajları: verimlilik (direkt adresleme – yığın üzeriden değil) Tarihçeye duyarlı fonksiyon desteği Dezavantajları: esneklik az (özyinelemeyi desteklemez) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Ömür açısından değişken kategorileri Yığıt-dinamik Yer sistem yığıtı üzerinde alınır Fonksiyonların lokal değişkenleri için Değişkenlerin yer bağlaması değişkenlerin içinde bulundukları fonksiyonlar çağrıldığı zaman gerçekleşir Avantajları: Özyinelemeye fırsat tanır Yerden tasarruf (fonksiyon çalışmadığı zamanda yer alınmış olmaz) Dezavantajları: Yer alma-verme fazladan masrafı Fonksıyonlar tarihe duyarlı değil Endirekt adresleme (yığıt çerçevesi başlangıcı + uzantı) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Ömür açısından değişken kategorileri Açıkça yığın dinamik Komutlarla program çalışırken yer alıp verme sağlanır (malloc, new, delete vs.) İşaretçilerle veya referanslarla erişim sağlanır Avantajları: Dinamik yer yönetimi İleri seviyeli veri yapılarınına olanak sağlar Dezavantajları: Verimsiz Güvenilmez (hata yapmaya elverişli) Hafıza kaçakları Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Ömür açısından değişken kategorileri Üstü kapalı yığın-dinamik String, dizi ve diğer objelerin yer alımı-geri verilmesi otomatik olarak yığın (heap) üzerinde yapılır. Bir değişkene atama yapıldığında (ör: x=“abc”) veya bir literal değer kullanıldığında (ör: print(“abc”)) başlatılır Avantaj Kolay kullanım Dezavantajlar: Verimsiz (bütün bilgi obje üzerinde saklanır) Hata tespiti zordur (dinamik tipleme) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Tip kontrolü İşlem (operator) ve işlenilen (operand) kavramının atamalara ve foksiyonlara genişletilmesi olayı (operatörler doğru tipteki işlenilenle çalışırlar) Tip kontrolü operatörün parametrelerinin operatörün beklnetileri ile uyumlu olduğun doğrulnamasıdır Uyumlu bir tip ya operatörün beklediği tiptir, ya da derleyici tarafından üretilen kod tarafından otomatik olarak beklenilen tipe çevrilebilen bir tiptir. Otomatik çevrilmenin adı: zorlama (coersion) Tip hatası: Operatörün kabul edemeyeceği bir parametre tipine uygulanması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Tip kontrolü... Tip bağlamaları statik ise, hemen hemen tüm tip kontrolleri statik olabilir (program çalışmadan önce yapılabilir) Tip bağlamaları dinamik ise tip kontolü de dinamik olmalı Bir dilde tüm tip hataları bulunabiliyorsa bu dil kuvvetlice tiplenmiş demektir Kuvvetlice tiplenmiş olmanın avantajı: tip hatasına sebebiyet veren değişken kullanım hatalarını bulur Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kuvvetlice tiplenme Dil örnekleri: C ve C++: kuvvetlice tiplenmiş değil. (parametrelerin tip kontolunün yapılmasından kaçınılabilir) Ada büyük ölçüde kuvetlice tiplenmiştir Java ve C#: Ada gibi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kuvvetlice tiplenme… Zorlama (coersion) kuvvetlice tiplemeyi zayıflatır (değişkenin kullanımı yanlış olsa bile bu yanlışlık zorlama yüzünden keşfedilemez) Java’da C++a göre zorlamaların ancak yarısı olsa da, Ada’ya göre kuvvetlice tipleme yönünden çok zayıftır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

İsim Tip Eşdeğerliği İki değişkenin ancak ayni deklarasyonda tanımlanmışlarsa, veya ayni tanımlı tipi kullanıyorlarsa isim tip eşdeğerliği vardır. Gerçeklenmesi (implementatin) kolay, ama çok sınırlaryıcı: Integer tiplerin ald dizileri integer ile uyumlu olmaz Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Yapısal tip eşdeğerliği İki değişkenin iç yapıları ayni ise yapısal tip eşdeğerlikleri var demektir. Daha esnek, ama gerçeklenmesi daha zor Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Değişken özellikleri: Etki alanı Bir değişkenin etki alanı görünebildiği ifadelerdir Yerel olmayan değişkenler bir program ünitesinde görünebilen, ama orada tanimli olmayan değişkenlerdir. Dilin etki alanı kuralları isimlerin hangi hafıza yerleri ile ilişkilendirileceğini belirler. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Statik etki alanı Program metnine bağlı Kullanılan değişkenin nerede tanımlı olduğunu bulmak gerekiyor Arama yöntemi: Tanımları içden dışa doğru ara Bir etki alanının dışındaki etki alanları onun statik atalarıdır. En yakındaki etki alanı ise statik ebeveynidir Bazı dillerde içiçe etki alanlarına sebebiyet veren içiçe fonksiyon tanımları mümkündür (ör: Ada, JavaScript, PHP) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Statik etki alanı … Değişkenler bir birimden/üniteden ayni isimde, daha içeride/yakında bir değişken tanımlamak sureti ile saklanabilir C++ ve Ada dillerinde bu “saklanmış” değişkenlere erişmek mümkündür Ada: birim.isim C++: sınıf_adı::isim Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Bloklar C-tabanlı diller: while (...) { int index; ... } Program birimi içinde statik etki alanı yaratma yöntemi Örnekler C-tabanlı diller: while (...) { int index; ... } Ada: declare Temp : Float; begin end Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Statik etki alanı örneği MAIN, A ve B’yi çagırır A, C ve D’yi çağırır B, A ve E’yi çağırır MAIN E A C D B Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Statik etki alanı örneği … MAIN MAIN A B A B C D E C D E Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Dinamik etki alanı Program ünitelerinin çağrilma sırasına bağlı, içiçeliğe değil Değişkenler çağırma zincirini geriye doğru arayarak bulunur Evaluation of Dynamic Scoping: Advantage: convenience (called subprogram is executed in the context of the caller) Disadvantage: poor readability Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Dinamik etki alanı değerlendirmesi Avantajı Gerçeklenmesi kolay Dezavantajları Okunabilirlik kötü (kullanılan bir yerel-olmayan değişkenin gerçekte nerede tanımlı olduğunu bulmak zor) Tehlikeli Bir fonksiyonun hangi fonksiyon tarafından çağrılcağının garantisi olmadığından istemeden yanlış değişkene erişmesi/değiştirmesi mümkün Çağıran fonksiyonun kendinden habersiz değişkenlerinin değerlerinin değişmesi mümkğün Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Etki alanı örneği Big, Sub1’i çagırır Sub1, Sub2’yi çağırır - X tanımı Sub1 - X tanımı - ... çağır Sub2 Sub2 - X’i kullan çağır Sub1 … Big, Sub1’i çagırır Sub1, Sub2’yi çağırır Sub2 X’i kullanır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Etki alanı örneği ... Statik etki alanı Dinamik etki alanı Big’deki X kullanılır Dinamik etki alanı Sub1’deki X kullanılır X Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Etki alanı ve ömür Etki alanı görünürlükle ilgili Ömür bir değişkenin ne zaman hafıza yerine bağlandığı, ne zaman bu bağın koparıldığı ile ilgili C veya C++ fonksiyonlarındaki static değişkenler Etki alanı: fonksiyonun içi Ömrü: Programın başladığı andan bittiği ana kadar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Referans Çevreleri Bir ifadenin referans çevresi o ifadedeki görülebilen tüm isimlerdir Statik etki alanlı bir dilde, lokal değişkenler + dıştaki etki alanlarındaki değişkenler Dinamik etki alanlı bir dilde, lokal değişkenler + çağrı zincirindeki fonksiyonların görünen değişkenleri Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Özet Küçük/büyük harf duyarlılığı Değişkenleri tanımlayan 6 özellik: ad, adres, değer, tip, ömür, etki alanı Bağlama: özelliklerin program nesneleri ile ilişkilendirilmesi Sayısal değişkenlerin sınıflandırılması: statik, yığıt dinamik, açıkça yığın dinamik, üstü kapalı yığın dinamik Kuvvetli tipleme, tüm tip hatalarının keşfedilme garantisi demektir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ