34
Programlama Dillerinin Prensipleri Giriş Belli Başlı Programlama Dillerinin Evrimi Söz Dizimi ve Anlam Bilimini Tanımlama Söz Dizimi ve Sözcük Analizi İsim, Tür,Bağlama Kavramları Veri Yapıları İfadeler ve Atama Cümleleri İfade Seviyesi Kontrol Yapıları Altprogramlar. Programı uygulama Abstract veri türleri ve enkapsülasyon Object- Oriented Programlama Desteği Altprogramlar Hata Yakalama Fonksiyonel Programlama Dilleri Mantıksal Programlama Dilleri Resul KARA

Programlama Dillerinin Prensipleriakademik.duzce.edu.tr/Content/Dokumanlar/resulkara/DersNotlari/c73a... · – Programlama dilleri kavramlarını öğrenirken, bu kavramları etkileyen

  • Upload
    others

  • View
    44

  • Download
    0

Embed Size (px)

Citation preview

Programlama Dillerinin Prensipleri

• Giriş• Belli Başlı Programlama Dillerinin Evrimi• Söz Dizimi ve Anlam Bilimini Tanımlama• Söz Dizimi ve Sözcük Analizi• İsim, Tür,Bağlama Kavramları• Veri Yapıları• İfadeler ve Atama Cümleleri• İfade Seviyesi Kontrol Yapıları• Altprogramlar.• Programı uygulama• Abstract veri türleri ve enkapsülasyon• Object- Oriented Programlama Desteği• Altprogramlar • Hata Yakalama• Fonksiyonel Programlama Dilleri• Mantıksal Programlama Dilleri

ResulKARA

PROGRAMLAMADİLLERİNİNPRENSİPLERİ

Bölüm1- Başlangıç

Kaynak:Concepts ofProgrammingLanguages by RobertW.Sebesta

Bölüm 1 Konular

• Programlama Dilleri Kavramı’nın Çalışılma Sebepleri

• Programlama Alanları• Dil Değerlendirme Kriterleri• Dil Tasarımını Etkileyen Faktörler• Dil Sınıfları• Dil Tasarımının Artıları Eksileri• Uygulama Yöntemleri• Programlama Ortamı

ResulKARA

Programlama Dilleri Kavramının Çalışılma Sebepleri• Fikirleri ifade etme yeteneği arttı

– Programcılar için, yazılım geliştirme sürecinde çeşitli kısıtlar vardır. Yazılım geliştirdikleri dilde denetim yapıları, veri yapıları ve kullanabilecekleri soyutlamalara sınırlamalar getirilir; Dolayısıyla, yapabilecekleri algoritma biçimleri de aynı şekilde sınırlıdır. Daha geniş bir programlama dili özellikleri farkındalığı, yazılım geliştirmedeki bu kısıtlamaları azaltabilir. Programcılar yeni dil yapılarını öğrenerek yazılım geliştirme düşünce süreçlerini genişletebilirler.

• Uygun dili seçmede gelişmiş bilgi birikimi– Pek çok profesyonel programcı, bilgisayar bilimlerinde çok az resmi

eğitime sahiptir; programlama becerilerini kendi başlarına ya da kurum içi eğitim programlarıyla geliştirdiler. Bu eğitim, kuruluşun mevcut projeleri ile doğrudan ilgili olan bir veya iki dile sınırlar. Birçok diğer programcı yıllar önce örgün eğitim gördü. Öğrendikleri diller daha sonraları kullanılmadı. Yeni dillerde olan pek çok özellik o dönemlerde pek bilinmiyordu. Yeni bir proje için bir dil seçileceğinde çoğu programcı, proje için uygun olmasa bile bildiği dili kullanır. Oysa diller hakkında bilgisi olsaydı en uygun dili seçebilirlerdi.

ResulKARA

Programlama Dilleri Kavramının Çalışılma Sebepleri• Artan yeni diller öğrenme yeteneği

– Bilgisayar programlama sürekli bir evrimleşme halindedir. Bu da sürekli öğrenmenin şart olduğu anlamına gelir. Yeni bir programlama dili öğrenme süreci, özellikle yalnızca bir veya iki dilde rahat olan ve genel olarak programlama dili kavramlarını hiç incelemiş biri için uzun ve zor olabilir. Dillerin temel kavramlarını tam olarak anladıktan sonra, bu kavramların öğrenilen dilin tasarımına nasıl entegre edildiğini görmek çok daha kolaylaşır. Uygulamanın öneminin daha iyi anlaşılması

• Uygulamanın öneminin daha iyi anlaşılması– Programlama dilleri kavramlarını öğrenirken, bu kavramları etkileyen

uygulama konularına dokunmak ilginç ve gereklidir. Bazı durumlarda, uygulama konularının anlaşılması, dillerin neden böyle tasarlandığının anlaşılmasına yol açar. Bu bilgi bir dili daha akıllıca kullanabilme yeteneğine yol açar. Programlama dili yapıları ve bu seçeneklerin sonuçları arasındaki tercihleri anlayarak daha iyi programcılar olabiliriz.

ResulKARA

Programlama Dilleri Kavramının Çalışılma Sebepleri• Bilinen dillerin daha iyi kullanılması

– Yeni dillerin çoğu büyük ve karmaşıktır. Bir programcı bildiği dilin sadece belirli kısımlarına hakimdir. Programlama dilleri kavramları incelenerek, daha önce kullanılan dillerin bilinmeyen ve kullanılmayan kısımları öğrenilebilir.

• Bilişim sistemlerindeki gelişmeler– Belli bir dil popüler hale geldiğinde bile genel olarak

sektörde en iyi dil olmadığına dair kanılar vardır. Bazı durumlarda, popüler diller bile kısmi olarak kullanılabilir. Dilleri seçen kişiler programlama kavramlarına yeterince aşina olmayabilirler. Bu dersi okuyan bir mühendis, bu kavramlara aşina olacaktır.

ResulKARA

Programlama Alanları• Bilgisayarlar, nükleer enerji santrallerini kontrol etmekten, cep telefonlarında video

ve oyun oynamaya kadar çok sayıda farklı alana uygulanmıştır. Bilgisayar kullanımındaki bu büyük çeşitlilik nedeniyle, çok farklı hedefleri olan programlama dilleri geliştirildi.

• Bilimsel uygulamalar– Tipik olarak, ilk bilimsel uygulamalarda basit veri yapıları kullanıldı, ancak çok

sayıda kayan noktalı (floating-point) aritmetik hesaplama gerektirdi. En yaygın veri yapıları diziler ve matrislerdir; en yaygın kontrol yapıları döngüler ve seçimler

– İlk ve örnek dil: Fortran• İş uygulamaları

– Raporlar oluşturma, ondalık sayıları ve karakterleri kullanma, verileri saklama özelliğine sahiptir

– İlk ve örnek dil: COBOL• Yapay zeka

– Sayılar yerine semboller, diziler yerine bağlı listeler kullanılır– İlk ve örnek dil: LISP

• Sistem programlama– İşletim sistemi ve destek programları yazmaya sistem prog. denir. – Yaygın dil: C

• Web yazılımı– Biçimlendirme için kullanılan dil: HTML– Dinamik içerik oluşturmak için betik dilleri: Javascript, Asp, php

• Mobil YazılımResulKARA

DilDeğerlendirmeKriterleri

• Okunabilirlik:Programlarınokunabilmeveanlaşılabilmekolaylığı

• Yazılabilirlik:Programlaroluşturmadadilinkolaykullanılabilirliği

• Güvenilirlik:Şartlarauyumsağlama• Maliyet:Toplam,nihaimaliyet

ResulKARA

DeğerlendirmeKriterleri:Okunabilirlik• Genelbasitlik

– Yönetilebilirözellikveyapılarkümesi– Azözellikçeşitliliği(aynıişlemiyapma)– Minimumoperatöraşırıyüklemesi(overloading)

• Ortogonallik– Nispetenküçükilkelyapılarkümesinispetenküçüksayıdayollabirleştirilebilir– Hermuhtemelkombinasyongeçerlidir

• Kontrolifadeleri– İyibilinenkontrolyapılarınınvarlığı(ör:while ifadesi)

• Veritürleriveyapıları– Veriyapılarıtanımlayabilmekiçinyeterliimkanlarınvarlığı

• Sözdizimindedikkatedilecekler– Belirteçbiçimleri:esnekbileşimler– Birleşikifadeleroluşturmayöntemleriveözelkelimeler– Şekilveanlam:kendibaşınatanımlayıcıyapılar,anlamlıanahtarkelimelerResulKARA

DeğerlendirmeKriteri:Yazılabilirlik• BasitlikveOrtogonallik

– Dahaazyapı,azsayıdaprimitive(temel)vebunlarıbirleştirenazsayıdakuralkümesi

• Soyutlamadesteği– Detaylarıngözardıedilmesineizinverenkarmaşıkyapıveişlemleri

tanımlamavekullanmayetisi• İfadeedilebilirlik

– İşlemleritanımlamanındahapratik/elverişliyolları– Örnek:for ifadesininpekçokmoderndildeiçerilmesi

ResulKARA

DeğerlendirmeKriteri:Güvenilirlik

• Türkontrolü(type checking)– Türhatalarınıtestetme

• İstisnaidurumidaresi(exception handling)– Run-timehatalarıyakalayıpdüzelticiölçütlerbelirlemek

• Çakışma(aliasing)– Hafızanınaynılokasyonunu işaretedenikiyadadahafazlametodunvarlığı

• Okunabilirlikveyazılabilirlik– Biralgoritmanın“doğal”yollarlaifadesinidesteklemeyenbirdil

mecburen“doğalolmayan”yaklaşımlarkullanırvebudaazalangüvenilirliğigetirir

ResulKARA

DeğerlendirmeKriteri:Maliyet

• Programcılarıdilinkullanımıkonusundaeğitme• Programlaryazma(belliuygulamalarayakınlık)• Programlarınderlenmesi(compiling)• Programlarınyürütülmesi(executing)• Diluygulamasistemi:ücretsizderleyicikullanılabilirliği

• Güvenilirlik:zayıfgüvenlikyüksekmaliyetgetirir• Programlarıkorumak,sürekliliğinisağlamak

ResulKARA

DeğerlendirmeKriterleri:Diğerleri

• Taşınabilirlik(Portability)– Programlarınbiruygulamadandiğerinetaşınabilmekolaylığı

• Genellik– Genişçerçevedekiuygulamalarauygulanabilirlik

• İyitanımlanma– Bütünlükvedilinresmitanımınınhassasiyeti

ResulKARA

DilTasarımınıEtkileyenFaktörler

• BilgisayarMimarisi– Dilleryaygınbilgisayarmimarisinegöregeliştirilirler(von Neumann mimarisinegöre)

• Programlamametodolojileri– Yeniyazılımgeliştirmemetodolojileri(ör,nesneyedayalıyazılımgeliştirme)yeniprogramlamaparadigmalarına(stillere)dolayısıylayeniprogramlamadillerinegötürür

ResulKARA

BilgisayarMimarilerininEtkisi• İyibilinenbilgisayarmimarisi:Von Neumann• İmperatif diller(hesaplamayı,programyadamakinenin

konfigürasyonunudeğiştirenifadeleryoluylatanımlayanprogramlamastili),baskın,von Neumann bilgisayarlaryüzünden– Veriveprogramlarhafızadasaklanır– HafızaCPU’danayrı– TalimatlarveverilerhafızadanCPU’yadoğruiletilir– İmperatif dillerintemeli

• Hafızahücrelerideğişkenlerolarakmodellenir• Aktarım(piping)atamaifadeleriolarakmodellenir• İterasyon (yineleme)verimlidir

ResulKARA

Von Neumann Mimarisi

ResulKARA

ProgramlamaMetodolojilerininEtkileri

• 1950’lerve1960’larınilkyılları:basituygulamalar;makineninverimineduyulanendişe

• 1960’larınsonyılları:İnsanverimiönemliolur;okunabilirlik,dahaiyikontrolyapıları– Yapılanmışprogramlama– Yukarıdanaşağıyatasarımveadımadımgeliştirme/iyileştirme

• 1970’lerinsonyılları:SüreceDayalıdanNesneyeDayalıya– Verisoyutlaması

• 1980’lerinortaları:NesneyeDayalıProgramlama– Verisoyutlaması+miras(inheritance)+çokbiçimlilik(polymorphism)

ResulKARA

DilSınıfları• İmperatif

– Değişkenler,atamaifadeleriveyinelemetemelözellikleridir– Örnekler:C,Pascal

• Fonksiyonel– Hesaplamalarıverilenparametrelerefonksiyonlarıuygulayarakyapanaraç

• Mantık– Kuraltabanlı(kurallarbellibirsırayagörebelirtilmez)– Örnek:Prolog

• Nesneyedayalı– Verisoyutlama,miras,geçbağlama(late-binding)– Örnekler:Java,C++

• Biçimleme(Markup)– Yeni;programlamadanziyadewebdökümanlarının genelplanını/biçimini

belirlemedekullanılır– Örnekler:XHTML,XML

ResulKARA

DilTasarımınınArtılarıEksileri• Güvenilirlik– Yürütmemaliyeti

– Çelişkilikriter– Örnek:Javauygundizinlemeiçintümkaynaklardandizielemanlarının

kontroledilmişolmasınıtalepedervebudaartanyürütmemaliyetiniberaberindegetirir

• Okunabilirlik– Yazılabilirlik– Diğerçelişkilikriter– Örnek:APLsıkıştırılmış/yoğunbirprogramdayazılabilecekkarmaşık

hesaplamalaryapmayaelverişli,pekçokgüçlüoperatör(veçoksayıdayenisembol)sunarancakzayıfokunabilirlikmaliyetidebunutakipeder

• Yazılabilirlik(esneklik)– Güvenilirlik– Birdiğerçelişkilikriter– Örnek:C++işaretçileri(pointers)güçlüveoldukçaesnektirlerama

kullanımlarıgüvenlideğildirResulKARA

UygulamaYöntemleri

• Derleme– Programlarmakinedilineçevrilir

• Safyorumlama– Programlaryorumlayıcıolarakbilinendiğerbirprogramtarafındanyorumlanırlar

• MelezUygulamaSistemleri– Derleyicilervesafyorumlayıcılararasındakiuzlaşma

ResulKARA

BilgisayarınKatmanlıYapısıİşletimsistemivediluygulamalarıbilgisayarınmakinearayüzüetrafındakatmanlaşmıştır

ResulKARA

Derleme• Yüksekseviyeprogramı(kaynakdili)makinekodunaçevir(makinedili)• Yavaşçeviri,hızlıyürütme• Derlemesürecininbirkaçfazıvardır:

– Sözcük(lexical)analiz:kaynakprogramdakikarakterlerisözcükbirimlerinedönüştürür

– Sözdizimi(syntax)analizi:sözcükbirimlerini,programınsözdizimselyapısınıgösterengramerağaçlarına(parse trees)dönüştürür

– Anlam(semantic)analizi:arakodüretir– Kodüretme:makinekoduüretilir

ResulKARA

DerlemeSüreci

ResulKARA

EkDerlemeTerminolojileri

• Yükmodülü(yürütülebilirgörüntü):kullanıcıvesistemkoduberaber

• Bağlamaveyükleme:sistemprogramlarınıtoplamaveonlarıkullanıcıprogramlarınabağlamasüreci

ResulKARA

MakineKodununYürütülmesi

• Yakala-yürüt-dön(von Neumann Mimarisiiçin)

Program sayıcısını başlangıç durumuna getir

repeat sureklidon

sayac tarafindan isretlenen deyimleri getir

sayaci artir

komutu coz

komutu calistir

end repeat

ResulKARA

Von Neumann Darboğazı

• Bilgisayarınhızınıbilgisayarınhafızasıylaişlemcisiarasındakibağlantıhızıbelirler

• Programkomutlarıçoğunluklabağlantıhızındandahahızlıyürütülür;böylecebağlantıhızıbirdarboğazasebepolur

• Von Neumann darboğazıbilgisayarınhızınısınırlayantemelfaktördür.

ResulKARA

SafYorumlama• Buyaklaşımlaprogramlartercüman(interpreter)denilenbaşkabirprogram

tarafındanyorumlanırvehiçbirçeviriolmaz• Tercümanınprogramı,getirme-yürütmedöngüsü,makinetalimatlarıyerineüst

düzeydilprogramifadeleriileilgilenenbirmakineninbiryazılımsimülasyonuileyapar.Buyazılımsimülasyonunasanalmakinedenir.

• Kaynakdüzeyindehataayıklamanınkolayuygulanması avantajınasahiptir• Derlemesistemlerinegöre10ila100katdahayavaşyürütmezamanıvardır• Buyavaşlığınbirincilkaynağı,makinedilitalimatlarındançokdahakarmaşıkolan

üstdüzeydiltablolarınınçözülmesidir• Diğerbirdezavantajdahafazlaalangerektirmesidir.Kaynakprogramaekolarak,

semboltablosuyorumlamasırasındamevcutolmalıdır.• 1960'larınbazıdillerinilkversiyonları(APL,SNOBOLveLISP)buyöntemikullanmış

ancak1980'lerdebuyaklaşımnadirenüstdüzeydillerdekullanılmıştır.• GünümüzdeJavaScript vePHPgibibazıWebbetikdillerindesafyorumlama

kullanılmaktadır

ResulKARA

SafYorumlamaSüreci

ResulKARA

MelezUygulamaSistemleri• Derleyicilervesafyorumlayıcılararasındakibiruzlaşı• Biryüksekseviyedilprogramı,kolayçeviriyeimkansağlayanaraseviyebir

dileçevrilir• Safyorumlamadandahahızlı• Örnekler

– Perl programlarıhatalarıyorumlamadanönceyakalamakiçinkısmenderlenmiştir

– Java’nınilkuygulamalarımelezdi;araform,byte kodu,run-timesistemivebyte kodçeviricisi(bunlarhepbirlikteJavaSanalMakinesiolarakbilinir)olanherhangibirmakineyetaşınabilirliksağlar

ResulKARA

MelezUygulamaSüreci

ResulKARA

Just-in-Time(TamZamanında)UygulamaSistemi• TamZamanında(JIT)uygulamasistemiilkolarakprogramlarıbir

aradileçevirir.• Ardındanyürütmesırasında,aradilmakinekodunaderler• Makinekodusürümü,sonrakiçağrılariçinsaklanır.• JITsistemleriJavaprogramlarıiçinyaygınolarak

kullanılmaktadır.• Ayrıca,.NETdillerininhepsibirJITsistemiilegerçekleştirilir.

Bazenbiruygulayıcı,birdiliçinhemderlenmişhemdeyorumlananuygulamalarısağlayabilir. Budurumlarda,tercümanprogramlarıgeliştirmekvehataayıklamakiçinkullanılır. Ardından,(göreceliolarak)hataiçermeyendurumaulaşıldıktansonra,programlaryürütmehızınıartırmakiçinderlenir.

ResulKARA

Preprocessors->Önİşlemciler

• Birönişlemci,birprogramderlenmedenhemenöncebirprogramıişleyenbirprogramdır

• Önişlemci talimatlarıprogramlarayerleştirilmiştir• Önişlemci aslındabirmakrogenişleticisidir• Önişlemci talimatları,başkabirdosyadakikodunprogramkodunadahiledileceğinibelirtmekiçinkullanılır

• Örneğin,Cönişlemci talimatları:include,define– #include "myLib.h"– #define max(A, B) ((A) > (B) ? (A) : (B))

ResulKARA

ProgramlamaOrtamı• Yazılımgeliştirmedekullanılanaraçlarıntoplamınaprogramlamaortamı

denir• UNIX

– 1970'lerinortalarındailkkeztaşınabilirbirçokluprogramlamaortamıdır– Çeşitlidillerdeyazılımüretimivebakımıiçinçokçeşitligüçlüdestekaraçlarısunar.– UNIXşuanUNIXüzerindeçalışanbirgrafikkullanıcıarabirimi(GUI)aracılığıylasıklıkla

kullanılmaktadır.UNIXGUI'lerin örnekleri:• Solaris MasaüstüOrtamı(CDE),GNOMEveKDE'dir.BuGUI'ler,UNIX'eolanarayüzü,WindowsveMacintoshsistemlerine

benzemektedir.

• Borland JBuilder– Javageliştirmeiçinentegrebirderleyici,editör,hataayıklayıcıvedosyasistemisunanbirprogramlamaortamıolup,

dörtsisteminhepsinebirgrafikarayüz aracılığıylaerişilmektedir.– JBuilder,Javayazılımıoluşturmakiçinkarmaşıkvegüçlübirsistemdir.

• MicrosoftVisualStudio.NET– Büyük,karmaşıkbirgörselortam– C#,VisualBasic.NET,Jscript,J#veyaC++programlarındakullanılır

• NetBeans– öncelikleJavauygulamasıgeliştirmeiçinkullanılanbirgeliştirmeortamıolmaklabirlikteJavaScript,Ruby vePHP'yi de

desteklemektedir– HemVisualStudio hemdeNetBeans,geliştirmeortamlarınındışındageliştirmeçerçevesidesunarlar

ResulKARA

Özet• Programlamadilleriniçalışmayadeğer;çünkü

– Farklıyapılarkullanmakapasitemiziartırır– Dilleridahaakılcıolarakseçmemizisağlar– Yenidilöğrenmemizikolaylaştırır

• Programlamadillerinideğerlendirmedeenönemlikriterler:– Okunabilirlik,yazılabilirlik,güvenilirlik,maliyet

• Diltasarımınıetkileyenenbüyüketmenlermakinemimarisiveyazılımgeliştirmemetodolojileridir

• Programlamadilleriniuygulamanıntemelyöntemleriderleme,safyorumlamavemelezuygulamadır

ResulKARA