Yaygın
Dillerin
Soyağacı
(Genealogy)
1
Zuse’nin Plankalkül’ü
• PLANKALKÜL adı verilen Almanya resmi
programlama dili olarak nitelendirilebilinecek
bir programlama dili Konrad Zuse liderliğinde
geliştirilmiş ve istenilen işlemleri ENIAC’ a
göre daha hızlı yapma başarısını göstermiştir.
• Fakat ENIAC ekibi bu süre zarfında daha
avantajlı oldukları için çok hızlı bir yanıt
verebilmiş ve PLANKALKÜL dilinin çok fazla
duyulmasını engellemiştir.
2
Zuse’nin Plankalkül’ü
• İlk yüksek seviye (donanımın
ayrıntılarına bağlı
olmayan) programlama dili
• Asla geliştirilmedi, öncülük etti
• İleri veri yapıları
– Kayan nokta (floating point), diziler
(arrays), kayıtlar (records)
• Sabitler (Invariants)
• if ve fin var, goto yok.
Konrad Zuse
(1910-1995)
3
Plankalkül Sentaksı
• A[4] + 1 deyimini A[5] ‘e atayan bir ifade
| A + 1 => A
V | 4 5 (altsimgeler-subscripts)
S | 1.n 1.n (veri tipleri-data types)
4
Sözdekodlar (Pseudocodes)
• Makine kodu kullanmak neden yanlıştı?
– Az okunabilirlik
– Az değiştirilebilirlik
– Deyim kodlama (Expression coding) usandırıcıydı
– Makine eksiklikleri—indeksleme veya kayan nokta
(floating point) yoktu
– Makine koduna göre daha yavaş
5
Sözdekodlar: Short Code (Kısa Kod)
• Short Code,1949 yılında Mauchly tarafından
BINAC bilgisayarları için geliştirildi
– Deyimler (Expressions) -soldan sağa doğru-
kodlandı
– İşlemlerden örnekler:
• a = (b + c) / b * c
• X3 = (X1 + Y1) / X1 * Y1 ikame değişkenleri
• X3 03 09 X1 07 Y1 02 04 X1 Y1 (operatör ve
parantezler temsil edilir.)
6
Sözdekodlar: Speedcoding (hızlıkodlama)
• Speedcoding 1954 yılında Backus tarafından
IBM 701 için geliştirildi
• Aritmetik ve matematiksel fonksiyonlar için
sözde işlemler
– Koşullu (conditional) ve koşulsuz (unconditional)
dallanma (branching)
– Dizi erişimi için kaydedicileri (registers) otomatik
arttırır
– Yavaştır!
– Kullanıcı programı için sadece 700 kelime
ayrılmıştır
7
IBM 704 ve Fortran
FORmula TRANslating System
• Fortran 0: 1954 - IBM firmasında John Backus
tarafından geliştirilmiş ancak uygulanmamıştır
• Fortran I:1957 – Ticari olarak kullanıma sunuldu
– İndeks yazmaçları (registers) ve kayan nokta
(floating point) donanımına sahip yeni IBM 704
için tasarlanmıştır
– Bu durum derlenmiş programlama dilleri fikrine
yol açtı, çünkü yorumlama maliyetini saklayacak
hiçbir yer yoktu (hiçbir kayan nokta yazılımı)
– Geliştirme platformu
• Bilgisayarlar küçük ve güvenilmezdi
• Uygulamalar bilimseldi
• Programlama metodolojileri ve araçları yoktu
• Makine verimliliği en önemli sorundu 8
Fortran I ‘e bakış
• FORTRAN’ın gerçekleştirilmiş ilk sürümü
– İsimler altı karaktere kadar olabiliyordu
– Sayma döngüsü (DO)
– Kullanıcı-tanımlı altprogramlar
– Üçlü seçim ifadesi (aritmetik IF)
– Veri tipi ifadeleri yoktur
9
Fortran I ‘e bakış (devamı)
• FORTRAN’ın gerçekleştirilmiş ilk sürümü
– Derleyici (compiler), 18 iş-yılı çabadan sonra Nisan
1957’de çıktı
– 400 satırdan fazla programlar, 704’ün az
güvenilirliği yüzünden nadiren doğru
derleniyordu
– Kod çok hızlıydı
– Kısa zamanda yaygın kullanılır hale geldi
– İlham kaynağı oldu
10
11
Fortran II
• 1958’ de yayıldı
– Bağımsız derleme
– Hataları (bugs) düzeltti
12
Fortran IV
• 1960-62 yıllarında geliştirildi
– Belirtilmiş (Açık, explicit) tip tanımlamaları
(IMPLICT (A-H))
– Mantıksal seçim ifadesi
– Altprogram (Subprogram) isimleri parametre
olabilir
– 1966 yılında ANSI standardını aldı
13
Fortran 77
• 1978 de yeni standart haline geldi
– Karakter dizisi (string) işleme
– Mantıksal döngü kontrol ifadesi (while benzeri)
– IF-THEN-ELSE ifadesi
14
Fortran 90
• Fortran 77’den en önemli farkları
– Dinamik diziler (arrays)
– İşaretçiler (Pointers) – bağlı liste, dinamik bellek
– Özyineleme (Recursion)
– CASE ifadesi
– Parametre tipi testi (parameter type checking)
– Bit düzeyinde işlem
– Dizi yapıları daha iyi kullanılabiliyor
– Altprogram yapıları daha esnek,
– İsimler daha uzun yazılabiliyor (okunabilirlik)
15
Fortran’ın en son versiyonu
• Fortran 95 – nispeten ufak eklemeler, artı bazı
silmeler
– Pointer ve yapılara varsayılan olarak ilk değer
atanması ve taşınabilirliğin mükemmel hale
getirilmesi temel hedef olmuştur.
– Nesneye dayalı programlama özellikleri de
FORTRAN dil ailesine sunulmaya çalışılmaktadır.
• Fortran 2003 - aynı
16
Fortran Değerlendirmesi
• Çok iyi optimize eden derleyiciler (90’dan önceki tüm
sürümler)
– Bütün değişkenlerin tipleri ve bellekleri çalışma
zamanından (run-time) önce düzeltilir
• Bilgisayarların kullanılma şeklini sürekli çarpıcı biçimde
değiştirdi
• Bilgisayar dünyasının lingua franca (uluslarası dil) ‘sı
(geçerli dili) olarak karakterize edildi
• 1950’li yıllarda makine dilinde yazılan kodların, çevrilmiş
kodlara göre daha hızlı çalışmasına rağmen FORTRAN
getirdiği kullanım kolaylığı ile büyük bir başarı sağlamıştır.
• Günümüze kadar bir çok sürümü çıkmış ve yenilenmiştir.
Sayısal uygulamaların programlanması için uygun bir
dildir.
17
Program Example
! Fortran 95 example program
Implicit none
Integer :: Int_List(99)
Integer :: List_Len, Counter, Sum, Average, Result
Result = 0
Sum =0
Read *, List_len
If ((List_Len > 0) .AND. (List_Len <100)) Then
Do Counter=1 List_Len
Read *,Int_List(Counter)
Sum = Sum + Int_List(Counter)
End Do
Average = Sum / List_len
Do Counter=1, List_Len
If (Int_List(Counter) > Average) Then
Result = Result + 1
End If
End Do
Print *, ‘Number of Values > average is ‘, Result
Else
Print *, ‘Error – list length value is not legal ‘
End If
End Program Example
Fortran Örnek
18
Fonksiyonel Programlama: LISP
• LISt Processing (Liste işleme)
– McCarthy tarafından MIT’de IBM 704 bilgisayarlar
için tasarlandı
• AI (Artificial Intelligence-yapay zeka)
araştırmasının ihtiyaç duyduğu dil şöyleydi:
– Veriyi liste halinde işleme (dizi (array) yerine)
– Sembolik hesaplama (sayısal yerine)
• Sadece iki veri tipi: atomlar and list (e)ler
• Sentaks lambda calculus’a dayalıdır
19
John McCarthy
• Program kodu ve veriler tam olarak aynı
formdadır:
• Örnek: (A B C D)
– Bu Eğer bir veri ise , A, B, C ve D verilerini içeren
bir listedir
– Eğer bir kod ise o zaman A fonksiyonunun B, C ve
D parametrelerine uygulanması olarak yorumlanır.
– Prefix ifadeler kullanılır.
• Olağanüstü esneklik, ifade gücü ve kodun
aynı zamanda veri olarak da kullanılabilmesi
özelliği LISP’i yapay zeka uygulamalarında
rakipsiz hale getirmiştir.
Fonksiyonel Programlama: LISP
20
İki LISP Listesini Gösterimi
(A B C D) ve (A (B C) D (E (F G)))
Listelerinin gösterimi
21
(DEFUN equal_lists (list1 list2)
(COND
((ATOM list1) (EQ list1 list2))
((ATOM list2) NIL)
((equal_lists (CAR list1) (CAR lsit2))
(equal_lists (CDR lsit1) (CDR list2)))
(T NIL)
)
)
LISP Örnek
22
ALGOL
• ALGOrithmic Language
• FORTRAN I’den esinlenilmiştir
• Geliştirme platformu
– FORTRAN ancak IBM 70x içindi
– Geliştirilmekte olan diğer bütün diller belirli
makineler içindi
– Taşınabilir dil yoktu; hepsi makine-bağımlıydı
– Haberleşme algoritmaları için evrensel bir dil
yoktu
• ALGOL evrensel bir dil tasarlama çabalarının
sonucuydu 23
Peter Naur
İlk tasarım işlemi
• ACM ve GAMM tasarım için Zürich’te dört gün
görüştü (Mayıs 27 den Haziran 1’e, 1958)
– FORTRAN dilinin başarısını gören GAMM (German
Society of Applied Mathematics) ve ABD’de
bulunan ACM (Association for Computer
Machinery) Peter Naur başkanlığında ortak bir
komite ile International Algorithmic Language
(IAL) adı verilen dili geliştirdiler.
• Dilin amaçları
– Matematiksel gösterime yakın
– Algoritma tanımlamak için iyi
– Makine koduna çevrilebilir olmalıydı
24
25
ALGOL 58
• Tip kavramı resmileştirildi
• İsimler herhangi bir uzunlukta olabilirdi
• Diziler (arrays) herhangi bir sayıda
altsimgeye(subscripts) sahip olabilirdi
• Parametreler kip (mode) ile ayrıldı (in & out)
• Altsimgeler (Subscripts) köşeli parantezler içine
yerleştirilmişti
• Bileşik (compound) ifadeler (begin ... end)
• Noktalı virgül ayırıcı olarak kullanıldı
• Atama ifadesi olarak ilke evrensel kullanım ---
işleci := oldu (variable := expression)
• if ‘in else-if deyimi vardı
• I/O yoktu - “onu makine bağımlı hale getirirdi”
26
ALGOL 58 Implementasyonu
• Geliştirmesi planlanmadı, fakat çeşitleri
şunlardı: (MAD, JOVIAL)
• Başlangıçta IBM istekli olmasına rağmen,
1959 ortalarında tüm destek geri çekildi
27
ALGOL 60 ‘e bakış
• Paris’teki 6-günlük toplantı sonucunda ALGOL
58’in değiştirilmesiyle geliştirildi
• Yeni özellikler
– Blok yapısı (yerel kapsam--local scope)
– Altprogram özyineleme (recursion)
– Yığın-dinamik diziler (Stack-dynamic arrays)
– Hala I/O (girdi/çıktı) ve dizim (string) işleme yoktu
28
ALGOL Örnek
// the main program (this is a comment)
BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "HELLO WORLD!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
END;
END.
// the main program (this is a comment)
begin
integer N;
Read Int(N);
begin
real array Data[1:N];
real sum, avg;
integer i; sum:=0;
for i:=1 step 1 until N do
begin
real val;
Read Real(val);
Data[i]:=if val<0 then -val else val
end;
for i:=1 step 1 until N do
sum:=sum + Data[i];
avg:=sum/N;
Print Real(avg)
end
end
29
COBOL
• COmmon Business Oriented Language)
• Geliştirme platformu
– UNIVAC, FLOW-MATIC’i kullanmaya başlıyordu
– USAF, AIMACO’ yu kullanmaya başlıyordu
– IBM , COMTRAN’ı geliştiriyordu
30
Grace Hopper
COBOL Tarihi arkaplan
• İngilizce sözcük yada cümle yapılarını kullanan ve
İŞLETMELERe yönelik ortak bir dildir.
• Özellikle bilgisayara büyük miktarda bilgi giriş-
çıkışının yapıldığı uygulamalar için geliştirilmiştir
(Stok kontrol, Bordro)
• FLOW-MATIC temellidir
• FLOW-MATIC özellikleri
– İsimler gömülü tirelerle (kısa çizgi- hyphen) 12
karaktere kadar çıkabiliyordu
– Aritmetik operatörler için İngilizce isimler
(aritmetik deyimler yoktu)
– Veri ve kod tamamen ayrıydı
– Her ifadede fiil (verb) ilk kelimeydi 31
COBOL Tasarım İşlemi
• İlk tasarım toplantısı (Pentagon) - Mayıs 1959
• Tasarım amaçları
– Basit İngilizce gibi görünmeli
– Daha az güçlü olacağı anlamına gelse bile kullanımı kolay
olmalı
– Bilgisayar kullanıcıların tabanını genişletmeli
– Mevcut derleyici problemleriyle kısıtlanmış olmamalı
• Tasarım komitesi üyelerinin tamamı bilgisayar
üreticilerinden ve DoD (Dept. Of Defence - Amerikan
savunma bakanlığı) birimlerinden oluşuyordu
32
programming language software developer handbook
COBOL
• COBOL içerisinde rapor yazdırma, tablo
içinde arama yapma, ve kullanımı çok kolay
olan dosya sıralama rutinleri bulunmaktadır.
• Yapısal özellikleri dolayısıyla veritabanı
yönetim sistemleri ile birlikte kullanımı
kolaydır.
• Fonksiyonları desteklememektedir
34
COBOL Örnek
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300 DATE-WRITTEN. 02/05/96 21:04.
000400* AUTHOR BRIAN COLLINS
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200 100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500 DISPLAY "HELLO, WORLD." LINE 15 POSITION 10.
100600 STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800 EXIT.
IDENTIFICATION DIVISION.
PROGRAM-ID. SeqWrite.
AUTHOR. Michael Coughlan.
* Example program showing how to create a sequential file
* using the ACCEPT and the WRITE verbs.
* Note: In this version of COBOL pressing the Carriage Return (CR)
* without entering any data results in StudentDetails being filled
* with spaces.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT StudentFile ASSIGN TO "STUDENTS.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD StudentFile.
01 StudentDetails.
02 StudentId PIC 9(7).
02 StudentName.
03 Surname PIC X(8).
03 Initials PIC XX.
02 DateOfBirth.
03 YOBirth PIC 9(4).
03 MOBirth PIC 9(2).
03 DOBirth PIC 9(2).
02 CourseCode PIC X(4).
02 Gender PIC X.
PROCEDURE DIVISION.
Begin.
OPEN OUTPUT StudentFile
DISPLAY "Enter student details using template below. Enter no data
to end."
PERFORM GetStudentDetails
PERFORM UNTIL StudentDetails = SPACES
WRITE StudentDetails
PERFORM GetStudentDetails
END-PERFORM
CLOSE StudentFile
STOP RUN.
GetStudentDetails.
DISPLAY "Enter - StudId, Surname, Initials, YOB, MOB, DOB, Course,
Gender"
DISPLAY "NNNNNNNSSSSSSSSIIYYYYMMDDCCCCG"
ACCEPT StudentDetails.
35
BASIC
• BASIC (Beginner’s All purpose Symbolic Instruction Code) dili ABD
Dartmouth College’de iki matematikçi Kemeny ve Kurtz tarafından, bilim
ile uğraşmayan kişilerin sayısal hesaplama gereksinimlerini karşılamak
için geliştirilmiş bir programlama dilidir.
• Kolay öğrenilmesi ve küçük bellekli bilgisayarlarda kullanılabilmesi
yaygın olarak kullanılmasını sağlamıştır.
• Tasarım amaçları:
– Bilim dışı öğrencilerin öğrenmesi ve kullanması kolay olan bir dil
– “güzel ve arkadaşça” olmalı
– Ödev için hızlı çalıştırılabilir olması
– Ücretsiz ve kişisel erişim
– Kullanıcının zamanı bilgisayarın zamanından değerlidir
• Mevcut popüler diyalekt: Visual BASIC
• Süre paylaşımlı (time sharing) ilk yaygın kullanılan dil
36
BASIC
• Öğrencilerin bilgisayara daha kolay
erişimlerini sağlamak ve basit ve etkin bir
programlama dili ile program yazabilme
isteklerine cevap vermek için tasarlanmış bir
dildir.
• Sadece14 komuta (LET, PRINT, GOTO…)
sahipti. Tek veri tipi (number= kayan noktalı
ve tamsayı)
• BASIC, FORTRAN ve ALGOL’den bazı
bileşenleri almıştır.
FORTRAN’dan DO çevrimini, ALGOL’den ise
“until” yerine “to” 37
BASIC
• Kolay bir dil ve genel maksatlı, belirli bir alana bağlı
değil
• Uzman kişilere de hitap edebiliyor
• Açık ve anlaşılır hata mesajlarına sahip, kullanıcı
bilgisayarla etkileşimli çalışabiliyor
• Küçük boyutlu programları hızlı bir biçimde
çalıştırabiliyor
• Kullanım için donanım bilgisine sahip olmaya gerek yok
• Kullanıcıyı işletim sistemi ayrıntılarından dahi
koruyabiliyor
• Derleyici kullanıyor, programın tümü makine diline
çevrildikten sonra icra ediliyor
• BASIC’in pekçok versiyonları olmuştur. 1989’da ise
nesne yönelimli uyarlama olan Visual BASIC ve 1998’de
VB6.0 sunulmuştur.
38
BASIC’in Şeceresi
39
BASIC Örnek
REM BASIC Example program
DIM intlist(99)
result = 0
sum = 0
INPUT listlen
IF listlen > 0 AND listlen < 100 THEN
FOR counter =1 to listlen
INPUT intlist(counter)
sum = sum + intlist(counter)
NEXT counter
average = sum/listlen
FOR counter =1 to listlen
IF intlist(counter) > average
THEN result = result +1
NEXT counter
PRINT “The number of values that are >
average is : “; result
ELSE
PRINT “ERROR - input list length is not
legal”
END IF
END
40
Veri Soyutlama (Data Abstraction)
nın başlangıçları: SIMULA 67
• Norveç’de Nygaard ve Dahl tarafından asıl olarak
sistem simülasyonu için tasarlanmıştır
• ALGOL 60 (Blok yapısı ve kontrol ifadeleri buradan
alınmıştır) ve SIMULA I ‘e dayalıdır
• Birincil Katkıları
– Eş yordam (Co-routines) – bir çeşit alt program
• Daha önce durdurulduğu yerden itibaren yeniden
çalışmaya başlayan altprogram
– Sınıf (class) adı verilen bir yapı içerisinde
geliştirilmiştir
– Sınıflar veri soyutlamanın (data abstraction)
temelleridir
– Sınıflar hem lokal veri hem de fonksiyonellik
içeren yapılardır
– Nesneler, miraslar 41
Simula Örnek
Begin
while 1 = 1 do
begin
outtext ("Hello World!");
outimage;
end;
End;
begin
integer Int1;
comment The first SIMULA program written for this book;
Int1:=3;
OutInt(Int1,4);
OutImage
end
class Lab;
begin
text Nam, Street, Town, County, Code;
procedure ReadLabel;
begin Nam :- InLine;
Street :- InLine;
Town :- InLine;
County :- InLine;
Code :- InLine
end++of++ReadLabel;
procedure WriteLabel;
begin
OutLine(Nam);
OutLine(Street);
OutLine(Town);
OutLine(County);
OutLine(Code)
end++of++WriteLabel;
end--of--Lab;
42
ALGOL 68
• ALGOL 60’ın devam eden gelişmesinden
meydana gelmiştir fakat onun üstkümesi
değildir
• Bazı yeni fikirlerin kaynağıdır (dilin kendisinin
hiçbir zaman yaygın kullanıma
ulaşamamasına rağmen)
• Tasarım ortogonallik (orthogonality)
kavramına dayanır
– Birkaç prensip kavram, birkaç birleştirici
mekanizma
43
ALGOL 68 Değerlendirmesi
• Katkılar
– kullanıcı-tanımlı veri yapılarını destekleyen
ilk dil
– Referans tipleri
– Dinamik diziler (flex (esnek) arrays) e izin
veren ilk dil
• Yorumlar
– ALGOL 60 dan daha az kullanım
– Öğrenilmesi oldukça zor olan bir gramer
ve dil yapısına sahiptir.
– Sadece bilimsel uygulamalar hedeflenerek
tasarlanmış bir dil
– Sonra gelen dillerde çok etkisi olmuştur,
özellikle Pascal, C, ve Ada 44
ALGOL’lerin ilk torunlarından bazıları
• ALGOL dilleri bütün zorunlu (imperative)
dilleri etkiledi
– Pascal
– C
– Modula/Modula 2
– Ada
– Oberon
– C++/Java
45
Pascal - 1971
• ALGOL 68 dilinin tasarımında çalışan araştırmacı Nicholas
Wirth tarafından öğretim amaçlı olarak tasarlanan PASCAL’ı
geliştirildi
– Yapısal programlama (structured programming)
öğretmek için tasarlandı
• Küçük, basit, yenilik getirmeyen bir dil
• Önceki bir çok dilin özelliklerini barındıran PASCAL, COBOL
ve PL/I’dan kayıt yapısını, ALGOL dilinden kullanıcı tanımlı tip
kavramını ve case deyimini almıştır.
• Programlama öğretmede en çok etkisi oldu
– 1970lerin ortalarından 1990 ların sonlarına kadar,
programlama öğretmek için kullanılan en yaygın dildi
• Basit ve kolay anlaşılabilir bir dil olmasına rağmen bazı
özelliklerinin olmamasından dolayı ticari uygulamalarda
kullanımı sınırlı kalmıştır.
46
Niklaus
Wirth
47
C - 1972
• Sistem programlama için tasarlandı (Bell
Laboratuvarlarında Dennis Richie
tarafından)
• Temel olarak BCLP, B’den, aynı zamanda
ALGOL 68’den geliştirildi
• Esnek yapı, güçlü operatörler
• Başlangıçta UNIX üzerinden yayıldı
• Birçok uygulama alanı
• PASCAL ve C dillerinin programlama
literatürüne katkısı azdır. Daha çok var
olan dillerin yapıları bir araya getirilmiştir.
48
K. Thompson and D. Ritchie
49
Mantık(Logic) temelli programlama:
Prolog
• Comerauer ve Roussel (University of Aix-Marseille), Kowalski
(University of Edinburgh) nin yardımıyla geliştirilmiştir
• Biçimsel mantığa (formal logic) dayalıdır
• Mantık yürütme ve ispatlama tekniklerini kullanır
• Prosedürel değildir
• Dil kuralar ve gerçeklerden olşur.
• PROLOG programı, bir nesneler kümesi ile bu nesnelerle ilişkili
hedeflere nasıl erişilebileceğini tanımlayan kurallar kümesinden
oluşur.
• Verilen sorguların (query) doğruluğunu anlamak için bir sonuç
çıkarma kullanan akıllı bir veritabanı sistemi olarak özetlenebilir
• 1972 yılında tanıtılan PROLOG dilinin temel uygulama alanı,
doğal dil işlemedir.
• Veritabanlarından uzman sistemlere kadar çeşitli uygulama
alanlarında günümüze kadar kullanılmıştır.
• Çok verimsiz, dar uygulama alanları
50
Prolog Örnek
mother(ayşe, ali).
father(mehmet, ali).
father(kemal, mehmet).
parent (X,Y) :- mother(X, Y).
parent(X, Y) :- father(X, Y).
grandfather(X, Z) :- parent (X, Y), father(Y,Z).
grandfather(X, Z) :- (mother(X, Y); father(X,Y)),
father(Y,Z).
grandfather(kemal, ali)?
51
Ada
• ABD Savunma Bakanlığı tarafından gömülü
(embedded) sistemler için geliştirilmiştir.
(1974~1979)
• Yüzlerce insan, çok para, ve yaklaşık sekiz yıl
içeren muazzam tasarım çabası
– Strawman gereksinimleri (Nisan 1975)
– Woodman gereksinimleri (Ağustos 1975)
– Tinman gereksinimleri (1976)
– Ironman gereksinimleri (1977)
– Steelman gereksinimleri (1978)
• İlk programcı olarak bilinen Augusta Ada
Byron’dan (1815-1851)sonra Ada adı verildi.
52
Ada Değerlendirmesi
• Katkılar
– Paketler – veri soyutlama desteği
– İstisna İşleme (Exception handling) - ayrıntılı
– Soysal (Generic) program birimleri
• Generic (Şablon, soysal) program birimleri sayesinde yazılımın
yeniden kullanılabilmesini buluşma yeri (rendezvous) mekanizmasının
ilavesiyle eşzamanlı çalışmayı desteklemektedir.
– Eş zamanlılık (Concurrency) – görevleme (tasking) modeli ile
– Blok yapılı
– Büyük boyutlu yazılımlar için uygundur
• Yorumlar
– Rekabetçi tasarım
– Yazılım mühendisliği ve dil tasarımı hakkında sonradan bilinen her
şeyi içeriyordu
– İlk derleyiciler çok zordu; ilk gerçekten kullanılabilen derleyici dil
tasarımının tamamlanmasından yaklaşık beş yıl sonra geldi
53
Ada Değerlendirmesi
• Çok geniş ve çok karmaşık bir dil. (Özellikle
yazım kuralları)
• Çeşitli durumlara uygulanabilecek hazır
şablonlara (template) sahiptir.
• İlk sıralar ADA derleyicileri kod üretmekte
verimsiz idi.
• En çok gömülü sistemlerde başarılı olmuştur.
• Veri tipleri konusunda çok zengindir. Çok-iş
işleme özelliğine sahiptir.
54
Ada 95
• Ada 95 (1988 de başladı)
– Tip türetme (type derivation) üzerinden OOP
desteği
– Paylaşılan veri için daha iyi kontrol mekanizmaları
– Yeni eş zamanlılık (concurrency) özellikleri
– Daha esnek kütüphaneler
– Altprogramların dinamik kapsam bağlama
kurallarına göre çağrılması mekanizması da ADA
95’in özelliklerine katılmıştır
• Popülerliği azaldı çünkü DoD daha fazla
kullanımına ihtiyaç duymadı buna karşın C++
‘ın popülaritesi arttı
55
Ada Örnek
with Text_To;
use Text_To
procedure hello is
begin
put("Hello World");
end hello
package ArrayCalc is
type Mydata is private;
function sum return integer;
procedure setval(arg:in integer);
private
size: constant:= 99;
type myarray is array(1..size) of integer;
type Mydata is record
val: myarray;
sz: integer := 0;
end record;
v: Mydata;
end;
package body ArrayCalc is
function sum return integer is
temp: integer;
-- Body of function sum
begin
temp := 0;
for i in 1..v.sz loop
temp := temp + v.val(i);
end loop;
v.sz:=0;
return temp;
end sum;
procedure setval(arg:in integer) is
begin
v.sz:= v.sz+1;
v.val(v.sz):=arg;
end setval; end;
with Text_IO; use Text_IO;
with ArrayCalc; use ArrayCalc;
procedure main is
k, m: integer;
begin -- of main
get(k);
while k>0 loop
for j in 1..k loop
get(m); put(m,3);
setval(m);
end loop;
new_line; put("SUM =");
put(ArrayCalc.sum,4);
new_line; get(k);
end loop;
end; 56
2.15 Nesneye-dayalı Programlama:
Smalltalk
• Xerox PARC’da, önce Alan Kay,
sonra Adele Goldberg tarafından
geliştirildi
• Bir nesneye-dayalı dilin ilk
tamamen implementasyonu (veri
soyutlama, miras (inheritance), ve
dinamik tip bağlama (binding))
• Grafiksel kullanıcı arayüzü
tasarımına öncülük etmiştir
• Sadece bir dil değil, aynı zamanda
yazılım geliştirme aracıdır
• OOP ‘yi yükseltmiştir
57
Smalltalk
• İlk olarak Smalltalk-80 versiyonu Xerox dışında ticari amaçlı
yazılımlarda kullanıldı. Halen yazılım geliştirimleri için yeni
teknolojileri de içererek kullanılmaktadır.
• Smalltalk tamamen nesne yönelimli olan ve ticari ilk
programlama dilidir.
• Geliştirme ortamı nesne yönelimli bir alt yapısı olması
nedeni ile çok gelişmiştir ( tarayıcı, editör, debugger, açık
kaynak kod).
• Kaynak kodunun açık olması iyi bir eğitim ortamı
haline gelmesini sağlamıştır. Diğer dillere göre çok
basit bir sentaksı vardır ve Java gibi Geniş ve sürekli
genişleyen bir programlama kütüphanesine sahiptir.
Platform bağımsız bir dildir.
• Bu dilde nesne yönelimli programlamanın 3 temel
karakteristiği olan veri soyutlama (data abstraction), kalıtım
(inheritance) ve dinamik bağlama(dynamic binding)
kavramlarının hepsi bulunmaktadır. 58
Alan Kay
2.16 Zorunlu (Imperative) ve nesneye dayalı
(Object-Oriented) özellikleri birleştirmek: C++
• Bell Labs’da Stroustrup tarafından in 1980 de
geliştirilmiştir
• C ve SIMULA 67 den geliştirilmiştir
• Nesneye dayalı programlama olanakları, kısmen SIMULA
67’den alınmıştır
• İstisna yakalama (exception handling) sağlar
• Hem prosedürel (fonksiyona izin verir) hem de OO
programlamayı desteklediği için geniş ve karmaşık bir
dildir.
• Popülaritesi OOP ile birlikte hızla artmıştır
• ANSI standardı Kasım 1997’de onaylandı
59
C++
• Çoklu miras alma desteklenmekte
• Operatör ve metotların üstüste bindirilmesi
desteklenmekte
• Sınıflar ve metotlat template edilebilir.
• Kuvvetli tip ayrımı, dinamik bellek yönetimi, hazır
şablonlara sahip olma ve çok biçimlilik (polymorphism)
özellikleri vardır.
• C’de bulunan özelliklerin çoğu burada vardır.
• PL/1 gibi geniş ve kompleks.
• Ada ve Java’dan daha az güvenli
• Microsoft’un sürümü (.NET le 2002 de çıkan): Yönetilmiş
(Managed) C++
– Delegeler (delegates), arayüzler (interfaces), çoklu miras
(multiple inheritance) yoktur 60
Eiffel (Bertrand Meyer – 1992 de)
• Direk olarak başka bir dilden geliştirilmemiştir
• Imperative ve OO özellikleri birleştiren Hybrid PL
• C++’tan küçük ve basittir, ama halen daha güçlüdür
• C++ kadar popüler değildir çünkü birçok C++
hayranı önceden C programcılarıydı
• Soyut veri yapılarını, kalıtımı ve dinamik bildirimleri
destekler (OO)
• Altprogram ve çağırıcı (caller) arasındaki iletişim için
bildirimler (assertions) kullanır.
• C++’dan daha küçük ve basittir. Fakat ifade
edilebilirliği ve yazılabilirliği neredeyse eşittir.
61
Delphi (Borland)
• Pascal artı OOP yi destekleyen özellikler
• C++’tan daha zarif, daha az kompleks ve güvenlidir
• Emir esaslı ve OO PL’nin başarılı bir biçimde
birleştirilmesidir.
• Pascal’dan türemiştir. Bu yüzden, dizi elemanlarının
kontrolünde, pointer aritmetiği ve tip zorlamalarında
C ve C++’tan daha emniyetlidir.
• Kullanıcı tanımlı operatörlere, generic altprogramlara
ve parametize edilmiş sınıflara izin vermez.
• Daha iyi ve daha kolay yazılım geliştirtme için bir
Graphical User Interface (GUI) sağlamaktadır.
62
2.17 Bir Zorunlu nesneye-dayalı dil
(Imperative-Based Object-Oriented): Java
• 1990’ların başında Sun’da geliştirildi
– C ve C++ gömülü electronik aygıtlar için yeterince
memnun edici değildi
• C++ temellidir
– Önemli derecede basitleştirilmiştir (struct,
union, enum, işaretçi (pointer) aritmetiği, ve C+
+’ın atama zorlamalarının yarısını içermez)
– Sadece OOP yi destekler
– Referansları vardır, işaretçiler (pointers) yoktur
– Appletler ve bir eş zamanlılık (concurrency) formu
için destek içerir
63
Java Değerlendirmesi
• C++’ın güvensiz özelliklerini elemiştir
• Eş zamanlılık (Concurrency) özellikleri
• Appletler için kitaplıklar, GUIler, veritabanı
erişimi
• Taşınabilir: Java Sanal (Virtual) Makinesi
kavranı, JIT derleyiciler
• WWW sayfaları için yaygın kullanılmaktadır
• Diğer alanlarda kullanımı başka dillere oranla
daha hızlı artmaktadır
64
Java
• Daha küçük, daha basit ve daha güvenilir bir PL tasarlamak
üzere C++ tabanlı olarak geliştirilmiştir.
• Java, basit, taşınabilir ve nesneye yönelik özellikte bir dildir.
• Miras alma, çok biçimlilik, kuvvetli tip kontrolü, eş zamanlılık
kontrolü, dinamik olarak yüklenebilen kütüphaneler, diziler,
string işlemleri ve standart kütüphane gibi özellikleri vardır.
• Bir Java programının temel yapısal bileşeni sınıftır. Bütün veri ve
metotlar bir sınıf ile ilişkilidir. Global veri yada fonksiyon yoktur.
• Hem referans değişkenleri ile hem de ilkel tiplerle erişilebilen
sınıflara sahiptir.
• C++’ta bulunan çoklu miras alma, operatörlerin üst üste
bindirilmesi, ve makro önişlemcisi özellikleri Java’da yoktur.
• Java’da şablon yapıları yoktur. İhtiyaç da minimuma inmiştir.
65
Java
• Pointer yoktur. Fakat bütün nesne sınıfları object adlı
kök sınıftan miras almaktadır.
• Records, union or enumeration tipler yoktur.
• Prosedürel programlamayı desteklemez.
• Sadece tekli miras almayı destekler fakat çok gelişmiş
bir GUI’ya sahiptir.
• İplik (threds) yapısına (bir pencere içerisinde yeni
pencereler açılmasına izin var) sahip olduğundan
eşzamanlılığı yönetmek kolaydır.
• Çöp toplama (Garbage collection) nesneler için
belleği en iyi kullanımı sağlar.
• Tip dönüşümü kuvvetlidir.
66
Java
 Java tipik olarak platformdan bağımsız olarak byte
kodları biçiminde derlenir. Daha sonra bu byte
kodlar bir Java görüntü makinesi adı verilen bir Java
yorumlayıcısı tarafından kullanılacağı platformun
makine dilindeki koduna çevrilir. Derlenmiş Java
sınıflarının taşınabilirliğini garantileyen bir özellik
vardır. Oda .class format adı verilen Java byte-kod
dosya formatının kesin olarak tanımlanmış olmasıdır.
 Java “applet” adı verilen başka sistemler içinde
gömülü programların geliştirilmesi için de
kullanılmaktadır. Bu appletler Internet Explorer yada
Netscape gibi web tarayıcı programlar içerisinde
kullanılabilir.
 Java internet ve web programcılığında yaygın olarak
kullanılmaktadır.
67
Java Örnek
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); //Display the string.
}
}
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("Hello world!", 50, 25);
}
}
68
2.18 Ağ (Web) için Betik Diller (Scripting
Languages):
• Perl
– ALGOL ile sadece C üzerinden ilişkilidir
– Bir yazı (scripting) dilidir
• Bir yazı dosyası (script file) çalıştırılacak komutları içerir
• Diğer örnekler: sh, awk, tcl/tk
– Larry Wall tarafından geliştirilmiştir
– Perl değişkenleri statik tiplidir ve örtülü (implicitly)
tanımlanmıştır
• Üç farklı isim alanı (namespace), bir değişkenin adının ilk
karakteriyle gösterilir
– Güçlü fakat tehlikeli
– Genel amaçlı bir dil olarak yaygın kullanılmaktadır
– Web CGI programlama için yaygın kullanımı kazanmış
– Ayrıca UNIX sistem yönetimi dil için yedek olarak kullanıldı
69
• JavaScript
– Netscape ve Sun Microsystems ortaklığı
– Web programlamada (istemci tarafı-client side) dinamik HTML
dökümanları oluşturmak için kullanılır
– Tamamen yorumlayıcıdır
– Java ile sadece benzer sentaksı nedeniyle ilgilidir
– Netscape ve Sun Microsystems ‘in ortak çalışmaları sonucu 1995’de
üretilmiştir. Orijinal adı “LiveScript”tir.
– Dil bileşenlerinin içinde, web sayfalarının çeşitli kısımlarını ve özellikle
HTML’i işleyecek ve kontrol edecek çeşitli olanaklar vardır.
– Javanın veri tipleri bakımından sert kısıtlamalarına karşılık, (Örn.Bütün
değişken tipleri derleme zamanında belirlenir), Javacript bu açıdan
toleranslıdır.( dynamik olarak tipleme)
– Java’nın HTML ile çalışma desteği zayıf iken, Javacript’in bu konudaki
desteği tamdır.
– Javascript nesneye yönelik ve blok-yapısal özellikte bir dildir.
2.18 Ağ (Web) için Betik Diller (Scripting
Languages):
70
• PHP (Personal Home Page)
– PHP: Hypertext Preprocessor
– Rasmus Lerdorf tarafından 1994’te tasarlandı
– Web uygulamaları (sunucu tarafı-server side) için kullanılır;
• Genellikle Web üzerinden form işleme ve veritabanı erişimi için
kullanılan bir sunucu tarafı HTML içine gömülü bir betik dilidir
• Çıktı olarak HTML kodu üretir
– Bir HTML dökümanı, okuyucu, hiper linkler boyunca diğer
HTML dökümanlarına götürecek biçimde programlanabilir.
– Gömülü bir HTML belgesi browser tarafından istendiğinde PHP
kodu Web server üzerinde yorumlanır.
– PHP’nin dizi yapısı JavaScript ve Perl dizi yapılarının bir
birleşimidir.
– PHP ile form erişimi oldukça kolaydır.
– Tamamen yorumlayıcıdır
2.18 Ağ (Web) için Betik Diller (Scripting
Languages):
71
• Python
– Nesne tabanlı yorumlayıcıya sahip bir metin dilidir
– Tip kontrol edilir ama dinamik yazılır
– CGI programlama ve form işleme için kullanılır
– Dinamik yazılabilir, ancak tipi kontrol edilir
– Listeleri, değişkenler gurubu ve karmaları destekler
• Lua
– Nesne tabanlı yorumlayıcıya sahip bir metin dilidir
– Tip kontrol edilir ama dinamik yazılır
– CGI programlama ve form işleme için kullanılır
– Dinamik yazılabilir, ancak tipi kontrol edilir
– Listeleri, değişkenler gurubu ve karmaları destekler, bütün
bunları onun tek veri yapısı ve tabloları üzerinden yapar
– Kolayca genişletilebilir
2.18 Ağ (Web) için Betik Diller (Scripting
Languages):
72
• Ruby
– Yukihiro Matsumoto (a.k.a, “Matz”) tarafından
Japonya’da tasarlandı
– Perl ve Python için yedek bir dil olarak başladı
– Bir saf nesne yönelimli bir (Script) dil
- Tüm veriler nesnedir
– Birçok operatör kullanıcı kodu tarafından yeniden
tanımlanabilen metotlar olarak uygulanır
– Sade yorumlayıcıdır
2.18 Ağ (Web) için Betik Diller (Scripting
Languages):
73
2.19 Yeni milenyum için C-temelli bir
dil: C#
• .NET geliştirme platformunun bir parçasıdır
• C++ , Java, ve Delphi temellidir
• Bileşen-temelli (component-based) yazılım
geliştirme için dil sağlar
• Bütün .NET dilleri (C#, Visual BASIC.NET,
Managed C++, J#.NET, ve Jscript.NET) Ortak Tip
Sistemi(Common Type System (CTS)) kullanır,
bu ortak bir sınıf kütüphanesi sağlar
• Yaygın kullanıma ulaşmıştır.
74
C#
• C ve C++ dil ailesinin ilk bileşen yönelimli (Component-
oriented) dilidir.
• C ve C++’dan derlenmiş, basit, modern, nesne yönelimli
ve tür güvenli bir programlama dilidir.
• Yüksek başarımlı Common Language Runtime (CLR); bir
yürütme motoru, bir çöp toplayıcı (garbage collection),
anında derleme, bir güvenlik sistemi ve zengin bir sınıf
çerçevesi (.NET Framework) içerir. CLR temelden, birden
çok dil desteğine kadar herşey için tasarlanmıştır.
• CLR’ı hedef alan diller: Visual C#, Visual BASIC .NET,
Managed C++, J#.NET ve Jscript.NET
• Common Language Specification, CLS, dil işlevselliğinin
yaygın bir düzeyini tanımlar. .NET Framework
işlevselliğine tam erişim ve ve diğer uyumlu dillerle
zengin birlikte çalışabilirlik vardır
75
C#
• C# otomatik bellek yönetimini kullanır. C# tür
sistemi işaretçi türleri ve nesne adreslerinin
doğrudan değiştirilmesine de izin verilir.
• C# tür sistemi bileşiktir. Her şey bir nesnedir.
Kutulama ve kutuyu açma gibi kavramların
yenilikçi kullanımı ile C#, her veri parçasının
bir nesne olarak değerlendirilmesine olanak
sağlayarak, değer türleri (value type) ve
başvuru türleri (reference type) arasındaki
açığı kapatır.
76
2.20 İşaretleme(Markup)/Programlama
Hibrit Diller
• XSLT
– eXtensible Markup Language (XML) (genişletilebilir
işaretleme dili): bir metamarkup dili
– eXtensible Stylesheet Language Transformation (XSTL)
(genişletilebilir stilsayfası dil dönüşümü) XML dökümanlarını
görüntülenebilmesi için dönüştürür
– Programlama yapıları (örn., döngüler)
• JSP
– Java Server Pages (Java Sunucu Sayfaları): dinamik web
dökümanlarını destekleyen teknolojiler koleksiyonu
– servlet: bir Web servera ait bir Java programı; servlet’in
çıktısı browserda görüntülenir
77
programming language software developer handbook

More Related Content

PPT
Programlama Dilleri
ODP
Programlama Dilleri Tanıtım
PPTX
yazılımmuh10.pptx
PDF
C ders-notlari-necati-ergin
PPT
Csharpnedir
PPT
Lisp Türkçe Notlarım V_1
PDF
ARM Mimarisinde Exploit Geliştirme
PPTX
Roket Yazılımı Eğitimi Hafta 1
Programlama Dilleri
Programlama Dilleri Tanıtım
yazılımmuh10.pptx
C ders-notlari-necati-ergin
Csharpnedir
Lisp Türkçe Notlarım V_1
ARM Mimarisinde Exploit Geliştirme
Roket Yazılımı Eğitimi Hafta 1

Similar to programming language software developer handbook (6)

PPTX
Yazılım Geliştirme Teknolojileri
PPTX
programming language software developer handbook
PPTX
C Sharp ve .NET
PPTX
C Sharp ve .NET
ODP
Zemberek Projesi
PPTX
0_Intro_iPhone_iOS13.pptx0_Intro_iPhone_iOS13
Yazılım Geliştirme Teknolojileri
programming language software developer handbook
C Sharp ve .NET
C Sharp ve .NET
Zemberek Projesi
0_Intro_iPhone_iOS13.pptx0_Intro_iPhone_iOS13
Ad

programming language software developer handbook

  • 2. Zuse’nin Plankalkül’ü • PLANKALKÜL adı verilen Almanya resmi programlama dili olarak nitelendirilebilinecek bir programlama dili Konrad Zuse liderliğinde geliştirilmiş ve istenilen işlemleri ENIAC’ a göre daha hızlı yapma başarısını göstermiştir. • Fakat ENIAC ekibi bu süre zarfında daha avantajlı oldukları için çok hızlı bir yanıt verebilmiş ve PLANKALKÜL dilinin çok fazla duyulmasını engellemiştir. 2
  • 3. Zuse’nin Plankalkül’ü • İlk yüksek seviye (donanımın ayrıntılarına bağlı olmayan) programlama dili • Asla geliştirilmedi, öncülük etti • İleri veri yapıları – Kayan nokta (floating point), diziler (arrays), kayıtlar (records) • Sabitler (Invariants) • if ve fin var, goto yok. Konrad Zuse (1910-1995) 3
  • 4. Plankalkül Sentaksı • A[4] + 1 deyimini A[5] ‘e atayan bir ifade | A + 1 => A V | 4 5 (altsimgeler-subscripts) S | 1.n 1.n (veri tipleri-data types) 4
  • 5. Sözdekodlar (Pseudocodes) • Makine kodu kullanmak neden yanlıştı? – Az okunabilirlik – Az değiştirilebilirlik – Deyim kodlama (Expression coding) usandırıcıydı – Makine eksiklikleri—indeksleme veya kayan nokta (floating point) yoktu – Makine koduna göre daha yavaş 5
  • 6. Sözdekodlar: Short Code (Kısa Kod) • Short Code,1949 yılında Mauchly tarafından BINAC bilgisayarları için geliştirildi – Deyimler (Expressions) -soldan sağa doğru- kodlandı – İşlemlerden örnekler: • a = (b + c) / b * c • X3 = (X1 + Y1) / X1 * Y1 ikame değişkenleri • X3 03 09 X1 07 Y1 02 04 X1 Y1 (operatör ve parantezler temsil edilir.) 6
  • 7. Sözdekodlar: Speedcoding (hızlıkodlama) • Speedcoding 1954 yılında Backus tarafından IBM 701 için geliştirildi • Aritmetik ve matematiksel fonksiyonlar için sözde işlemler – Koşullu (conditional) ve koşulsuz (unconditional) dallanma (branching) – Dizi erişimi için kaydedicileri (registers) otomatik arttırır – Yavaştır! – Kullanıcı programı için sadece 700 kelime ayrılmıştır 7
  • 8. IBM 704 ve Fortran FORmula TRANslating System • Fortran 0: 1954 - IBM firmasında John Backus tarafından geliştirilmiş ancak uygulanmamıştır • Fortran I:1957 – Ticari olarak kullanıma sunuldu – İndeks yazmaçları (registers) ve kayan nokta (floating point) donanımına sahip yeni IBM 704 için tasarlanmıştır – Bu durum derlenmiş programlama dilleri fikrine yol açtı, çünkü yorumlama maliyetini saklayacak hiçbir yer yoktu (hiçbir kayan nokta yazılımı) – Geliştirme platformu • Bilgisayarlar küçük ve güvenilmezdi • Uygulamalar bilimseldi • Programlama metodolojileri ve araçları yoktu • Makine verimliliği en önemli sorundu 8
  • 9. Fortran I ‘e bakış • FORTRAN’ın gerçekleştirilmiş ilk sürümü – İsimler altı karaktere kadar olabiliyordu – Sayma döngüsü (DO) – Kullanıcı-tanımlı altprogramlar – Üçlü seçim ifadesi (aritmetik IF) – Veri tipi ifadeleri yoktur 9
  • 10. Fortran I ‘e bakış (devamı) • FORTRAN’ın gerçekleştirilmiş ilk sürümü – Derleyici (compiler), 18 iş-yılı çabadan sonra Nisan 1957’de çıktı – 400 satırdan fazla programlar, 704’ün az güvenilirliği yüzünden nadiren doğru derleniyordu – Kod çok hızlıydı – Kısa zamanda yaygın kullanılır hale geldi – İlham kaynağı oldu 10
  • 11. 11
  • 12. Fortran II • 1958’ de yayıldı – Bağımsız derleme – Hataları (bugs) düzeltti 12
  • 13. Fortran IV • 1960-62 yıllarında geliştirildi – Belirtilmiş (Açık, explicit) tip tanımlamaları (IMPLICT (A-H)) – Mantıksal seçim ifadesi – Altprogram (Subprogram) isimleri parametre olabilir – 1966 yılında ANSI standardını aldı 13
  • 14. Fortran 77 • 1978 de yeni standart haline geldi – Karakter dizisi (string) işleme – Mantıksal döngü kontrol ifadesi (while benzeri) – IF-THEN-ELSE ifadesi 14
  • 15. Fortran 90 • Fortran 77’den en önemli farkları – Dinamik diziler (arrays) – İşaretçiler (Pointers) – bağlı liste, dinamik bellek – Özyineleme (Recursion) – CASE ifadesi – Parametre tipi testi (parameter type checking) – Bit düzeyinde işlem – Dizi yapıları daha iyi kullanılabiliyor – Altprogram yapıları daha esnek, – İsimler daha uzun yazılabiliyor (okunabilirlik) 15
  • 16. Fortran’ın en son versiyonu • Fortran 95 – nispeten ufak eklemeler, artı bazı silmeler – Pointer ve yapılara varsayılan olarak ilk değer atanması ve taşınabilirliğin mükemmel hale getirilmesi temel hedef olmuştur. – Nesneye dayalı programlama özellikleri de FORTRAN dil ailesine sunulmaya çalışılmaktadır. • Fortran 2003 - aynı 16
  • 17. Fortran Değerlendirmesi • Çok iyi optimize eden derleyiciler (90’dan önceki tüm sürümler) – Bütün değişkenlerin tipleri ve bellekleri çalışma zamanından (run-time) önce düzeltilir • Bilgisayarların kullanılma şeklini sürekli çarpıcı biçimde değiştirdi • Bilgisayar dünyasının lingua franca (uluslarası dil) ‘sı (geçerli dili) olarak karakterize edildi • 1950’li yıllarda makine dilinde yazılan kodların, çevrilmiş kodlara göre daha hızlı çalışmasına rağmen FORTRAN getirdiği kullanım kolaylığı ile büyük bir başarı sağlamıştır. • Günümüze kadar bir çok sürümü çıkmış ve yenilenmiştir. Sayısal uygulamaların programlanması için uygun bir dildir. 17
  • 18. Program Example ! Fortran 95 example program Implicit none Integer :: Int_List(99) Integer :: List_Len, Counter, Sum, Average, Result Result = 0 Sum =0 Read *, List_len If ((List_Len > 0) .AND. (List_Len <100)) Then Do Counter=1 List_Len Read *,Int_List(Counter) Sum = Sum + Int_List(Counter) End Do Average = Sum / List_len Do Counter=1, List_Len If (Int_List(Counter) > Average) Then Result = Result + 1 End If End Do Print *, ‘Number of Values > average is ‘, Result Else Print *, ‘Error – list length value is not legal ‘ End If End Program Example Fortran Örnek 18
  • 19. Fonksiyonel Programlama: LISP • LISt Processing (Liste işleme) – McCarthy tarafından MIT’de IBM 704 bilgisayarlar için tasarlandı • AI (Artificial Intelligence-yapay zeka) araştırmasının ihtiyaç duyduğu dil şöyleydi: – Veriyi liste halinde işleme (dizi (array) yerine) – Sembolik hesaplama (sayısal yerine) • Sadece iki veri tipi: atomlar and list (e)ler • Sentaks lambda calculus’a dayalıdır 19 John McCarthy
  • 20. • Program kodu ve veriler tam olarak aynı formdadır: • Örnek: (A B C D) – Bu Eğer bir veri ise , A, B, C ve D verilerini içeren bir listedir – Eğer bir kod ise o zaman A fonksiyonunun B, C ve D parametrelerine uygulanması olarak yorumlanır. – Prefix ifadeler kullanılır. • Olağanüstü esneklik, ifade gücü ve kodun aynı zamanda veri olarak da kullanılabilmesi özelliği LISP’i yapay zeka uygulamalarında rakipsiz hale getirmiştir. Fonksiyonel Programlama: LISP 20
  • 21. İki LISP Listesini Gösterimi (A B C D) ve (A (B C) D (E (F G))) Listelerinin gösterimi 21
  • 22. (DEFUN equal_lists (list1 list2) (COND ((ATOM list1) (EQ list1 list2)) ((ATOM list2) NIL) ((equal_lists (CAR list1) (CAR lsit2)) (equal_lists (CDR lsit1) (CDR list2))) (T NIL) ) ) LISP Örnek 22
  • 23. ALGOL • ALGOrithmic Language • FORTRAN I’den esinlenilmiştir • Geliştirme platformu – FORTRAN ancak IBM 70x içindi – Geliştirilmekte olan diğer bütün diller belirli makineler içindi – Taşınabilir dil yoktu; hepsi makine-bağımlıydı – Haberleşme algoritmaları için evrensel bir dil yoktu • ALGOL evrensel bir dil tasarlama çabalarının sonucuydu 23 Peter Naur
  • 24. İlk tasarım işlemi • ACM ve GAMM tasarım için Zürich’te dört gün görüştü (Mayıs 27 den Haziran 1’e, 1958) – FORTRAN dilinin başarısını gören GAMM (German Society of Applied Mathematics) ve ABD’de bulunan ACM (Association for Computer Machinery) Peter Naur başkanlığında ortak bir komite ile International Algorithmic Language (IAL) adı verilen dili geliştirdiler. • Dilin amaçları – Matematiksel gösterime yakın – Algoritma tanımlamak için iyi – Makine koduna çevrilebilir olmalıydı 24
  • 25. 25
  • 26. ALGOL 58 • Tip kavramı resmileştirildi • İsimler herhangi bir uzunlukta olabilirdi • Diziler (arrays) herhangi bir sayıda altsimgeye(subscripts) sahip olabilirdi • Parametreler kip (mode) ile ayrıldı (in & out) • Altsimgeler (Subscripts) köşeli parantezler içine yerleştirilmişti • Bileşik (compound) ifadeler (begin ... end) • Noktalı virgül ayırıcı olarak kullanıldı • Atama ifadesi olarak ilke evrensel kullanım --- işleci := oldu (variable := expression) • if ‘in else-if deyimi vardı • I/O yoktu - “onu makine bağımlı hale getirirdi” 26
  • 27. ALGOL 58 Implementasyonu • Geliştirmesi planlanmadı, fakat çeşitleri şunlardı: (MAD, JOVIAL) • Başlangıçta IBM istekli olmasına rağmen, 1959 ortalarında tüm destek geri çekildi 27
  • 28. ALGOL 60 ‘e bakış • Paris’teki 6-günlük toplantı sonucunda ALGOL 58’in değiştirilmesiyle geliştirildi • Yeni özellikler – Blok yapısı (yerel kapsam--local scope) – Altprogram özyineleme (recursion) – Yığın-dinamik diziler (Stack-dynamic arrays) – Hala I/O (girdi/çıktı) ve dizim (string) işleme yoktu 28
  • 29. ALGOL Örnek // the main program (this is a comment) BEGIN FILE F (KIND=REMOTE); EBCDIC ARRAY E [0:11]; REPLACE E BY "HELLO WORLD!"; WHILE TRUE DO BEGIN WRITE (F, *, E); END; END. // the main program (this is a comment) begin integer N; Read Int(N); begin real array Data[1:N]; real sum, avg; integer i; sum:=0; for i:=1 step 1 until N do begin real val; Read Real(val); Data[i]:=if val<0 then -val else val end; for i:=1 step 1 until N do sum:=sum + Data[i]; avg:=sum/N; Print Real(avg) end end 29
  • 30. COBOL • COmmon Business Oriented Language) • Geliştirme platformu – UNIVAC, FLOW-MATIC’i kullanmaya başlıyordu – USAF, AIMACO’ yu kullanmaya başlıyordu – IBM , COMTRAN’ı geliştiriyordu 30 Grace Hopper
  • 31. COBOL Tarihi arkaplan • İngilizce sözcük yada cümle yapılarını kullanan ve İŞLETMELERe yönelik ortak bir dildir. • Özellikle bilgisayara büyük miktarda bilgi giriş- çıkışının yapıldığı uygulamalar için geliştirilmiştir (Stok kontrol, Bordro) • FLOW-MATIC temellidir • FLOW-MATIC özellikleri – İsimler gömülü tirelerle (kısa çizgi- hyphen) 12 karaktere kadar çıkabiliyordu – Aritmetik operatörler için İngilizce isimler (aritmetik deyimler yoktu) – Veri ve kod tamamen ayrıydı – Her ifadede fiil (verb) ilk kelimeydi 31
  • 32. COBOL Tasarım İşlemi • İlk tasarım toplantısı (Pentagon) - Mayıs 1959 • Tasarım amaçları – Basit İngilizce gibi görünmeli – Daha az güçlü olacağı anlamına gelse bile kullanımı kolay olmalı – Bilgisayar kullanıcıların tabanını genişletmeli – Mevcut derleyici problemleriyle kısıtlanmış olmamalı • Tasarım komitesi üyelerinin tamamı bilgisayar üreticilerinden ve DoD (Dept. Of Defence - Amerikan savunma bakanlığı) birimlerinden oluşuyordu 32
  • 34. COBOL • COBOL içerisinde rapor yazdırma, tablo içinde arama yapma, ve kullanımı çok kolay olan dosya sıralama rutinleri bulunmaktadır. • Yapısal özellikleri dolayısıyla veritabanı yönetim sistemleri ile birlikte kullanımı kolaydır. • Fonksiyonları desteklememektedir 34
  • 35. COBOL Örnek 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HELLOWORLD. 000300 DATE-WRITTEN. 02/05/96 21:04. 000400* AUTHOR BRIAN COLLINS 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE-COMPUTER. RM-COBOL. 000800 OBJECT-COMPUTER. RM-COBOL. 000900 001000 DATA DIVISION. 001100 FILE SECTION. 001200 100000 PROCEDURE DIVISION. 100100 100200 MAIN-LOGIC SECTION. 100300 BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS. 100500 DISPLAY "HELLO, WORLD." LINE 15 POSITION 10. 100600 STOP RUN. 100700 MAIN-LOGIC-EXIT. 100800 EXIT. IDENTIFICATION DIVISION. PROGRAM-ID. SeqWrite. AUTHOR. Michael Coughlan. * Example program showing how to create a sequential file * using the ACCEPT and the WRITE verbs. * Note: In this version of COBOL pressing the Carriage Return (CR) * without entering any data results in StudentDetails being filled * with spaces. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT StudentFile ASSIGN TO "STUDENTS.DAT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD StudentFile. 01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(4). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Gender PIC X. PROCEDURE DIVISION. Begin. OPEN OUTPUT StudentFile DISPLAY "Enter student details using template below. Enter no data to end." PERFORM GetStudentDetails PERFORM UNTIL StudentDetails = SPACES WRITE StudentDetails PERFORM GetStudentDetails END-PERFORM CLOSE StudentFile STOP RUN. GetStudentDetails. DISPLAY "Enter - StudId, Surname, Initials, YOB, MOB, DOB, Course, Gender" DISPLAY "NNNNNNNSSSSSSSSIIYYYYMMDDCCCCG" ACCEPT StudentDetails. 35
  • 36. BASIC • BASIC (Beginner’s All purpose Symbolic Instruction Code) dili ABD Dartmouth College’de iki matematikçi Kemeny ve Kurtz tarafından, bilim ile uğraşmayan kişilerin sayısal hesaplama gereksinimlerini karşılamak için geliştirilmiş bir programlama dilidir. • Kolay öğrenilmesi ve küçük bellekli bilgisayarlarda kullanılabilmesi yaygın olarak kullanılmasını sağlamıştır. • Tasarım amaçları: – Bilim dışı öğrencilerin öğrenmesi ve kullanması kolay olan bir dil – “güzel ve arkadaşça” olmalı – Ödev için hızlı çalıştırılabilir olması – Ücretsiz ve kişisel erişim – Kullanıcının zamanı bilgisayarın zamanından değerlidir • Mevcut popüler diyalekt: Visual BASIC • Süre paylaşımlı (time sharing) ilk yaygın kullanılan dil 36
  • 37. BASIC • Öğrencilerin bilgisayara daha kolay erişimlerini sağlamak ve basit ve etkin bir programlama dili ile program yazabilme isteklerine cevap vermek için tasarlanmış bir dildir. • Sadece14 komuta (LET, PRINT, GOTO…) sahipti. Tek veri tipi (number= kayan noktalı ve tamsayı) • BASIC, FORTRAN ve ALGOL’den bazı bileşenleri almıştır. FORTRAN’dan DO çevrimini, ALGOL’den ise “until” yerine “to” 37
  • 38. BASIC • Kolay bir dil ve genel maksatlı, belirli bir alana bağlı değil • Uzman kişilere de hitap edebiliyor • Açık ve anlaşılır hata mesajlarına sahip, kullanıcı bilgisayarla etkileşimli çalışabiliyor • Küçük boyutlu programları hızlı bir biçimde çalıştırabiliyor • Kullanım için donanım bilgisine sahip olmaya gerek yok • Kullanıcıyı işletim sistemi ayrıntılarından dahi koruyabiliyor • Derleyici kullanıyor, programın tümü makine diline çevrildikten sonra icra ediliyor • BASIC’in pekçok versiyonları olmuştur. 1989’da ise nesne yönelimli uyarlama olan Visual BASIC ve 1998’de VB6.0 sunulmuştur. 38
  • 40. BASIC Örnek REM BASIC Example program DIM intlist(99) result = 0 sum = 0 INPUT listlen IF listlen > 0 AND listlen < 100 THEN FOR counter =1 to listlen INPUT intlist(counter) sum = sum + intlist(counter) NEXT counter average = sum/listlen FOR counter =1 to listlen IF intlist(counter) > average THEN result = result +1 NEXT counter PRINT “The number of values that are > average is : “; result ELSE PRINT “ERROR - input list length is not legal” END IF END 40
  • 41. Veri Soyutlama (Data Abstraction) nın başlangıçları: SIMULA 67 • Norveç’de Nygaard ve Dahl tarafından asıl olarak sistem simülasyonu için tasarlanmıştır • ALGOL 60 (Blok yapısı ve kontrol ifadeleri buradan alınmıştır) ve SIMULA I ‘e dayalıdır • Birincil Katkıları – Eş yordam (Co-routines) – bir çeşit alt program • Daha önce durdurulduğu yerden itibaren yeniden çalışmaya başlayan altprogram – Sınıf (class) adı verilen bir yapı içerisinde geliştirilmiştir – Sınıflar veri soyutlamanın (data abstraction) temelleridir – Sınıflar hem lokal veri hem de fonksiyonellik içeren yapılardır – Nesneler, miraslar 41
  • 42. Simula Örnek Begin while 1 = 1 do begin outtext ("Hello World!"); outimage; end; End; begin integer Int1; comment The first SIMULA program written for this book; Int1:=3; OutInt(Int1,4); OutImage end class Lab; begin text Nam, Street, Town, County, Code; procedure ReadLabel; begin Nam :- InLine; Street :- InLine; Town :- InLine; County :- InLine; Code :- InLine end++of++ReadLabel; procedure WriteLabel; begin OutLine(Nam); OutLine(Street); OutLine(Town); OutLine(County); OutLine(Code) end++of++WriteLabel; end--of--Lab; 42
  • 43. ALGOL 68 • ALGOL 60’ın devam eden gelişmesinden meydana gelmiştir fakat onun üstkümesi değildir • Bazı yeni fikirlerin kaynağıdır (dilin kendisinin hiçbir zaman yaygın kullanıma ulaşamamasına rağmen) • Tasarım ortogonallik (orthogonality) kavramına dayanır – Birkaç prensip kavram, birkaç birleştirici mekanizma 43
  • 44. ALGOL 68 Değerlendirmesi • Katkılar – kullanıcı-tanımlı veri yapılarını destekleyen ilk dil – Referans tipleri – Dinamik diziler (flex (esnek) arrays) e izin veren ilk dil • Yorumlar – ALGOL 60 dan daha az kullanım – Öğrenilmesi oldukça zor olan bir gramer ve dil yapısına sahiptir. – Sadece bilimsel uygulamalar hedeflenerek tasarlanmış bir dil – Sonra gelen dillerde çok etkisi olmuştur, özellikle Pascal, C, ve Ada 44
  • 45. ALGOL’lerin ilk torunlarından bazıları • ALGOL dilleri bütün zorunlu (imperative) dilleri etkiledi – Pascal – C – Modula/Modula 2 – Ada – Oberon – C++/Java 45
  • 46. Pascal - 1971 • ALGOL 68 dilinin tasarımında çalışan araştırmacı Nicholas Wirth tarafından öğretim amaçlı olarak tasarlanan PASCAL’ı geliştirildi – Yapısal programlama (structured programming) öğretmek için tasarlandı • Küçük, basit, yenilik getirmeyen bir dil • Önceki bir çok dilin özelliklerini barındıran PASCAL, COBOL ve PL/I’dan kayıt yapısını, ALGOL dilinden kullanıcı tanımlı tip kavramını ve case deyimini almıştır. • Programlama öğretmede en çok etkisi oldu – 1970lerin ortalarından 1990 ların sonlarına kadar, programlama öğretmek için kullanılan en yaygın dildi • Basit ve kolay anlaşılabilir bir dil olmasına rağmen bazı özelliklerinin olmamasından dolayı ticari uygulamalarda kullanımı sınırlı kalmıştır. 46 Niklaus Wirth
  • 47. 47
  • 48. C - 1972 • Sistem programlama için tasarlandı (Bell Laboratuvarlarında Dennis Richie tarafından) • Temel olarak BCLP, B’den, aynı zamanda ALGOL 68’den geliştirildi • Esnek yapı, güçlü operatörler • Başlangıçta UNIX üzerinden yayıldı • Birçok uygulama alanı • PASCAL ve C dillerinin programlama literatürüne katkısı azdır. Daha çok var olan dillerin yapıları bir araya getirilmiştir. 48 K. Thompson and D. Ritchie
  • 49. 49
  • 50. Mantık(Logic) temelli programlama: Prolog • Comerauer ve Roussel (University of Aix-Marseille), Kowalski (University of Edinburgh) nin yardımıyla geliştirilmiştir • Biçimsel mantığa (formal logic) dayalıdır • Mantık yürütme ve ispatlama tekniklerini kullanır • Prosedürel değildir • Dil kuralar ve gerçeklerden olşur. • PROLOG programı, bir nesneler kümesi ile bu nesnelerle ilişkili hedeflere nasıl erişilebileceğini tanımlayan kurallar kümesinden oluşur. • Verilen sorguların (query) doğruluğunu anlamak için bir sonuç çıkarma kullanan akıllı bir veritabanı sistemi olarak özetlenebilir • 1972 yılında tanıtılan PROLOG dilinin temel uygulama alanı, doğal dil işlemedir. • Veritabanlarından uzman sistemlere kadar çeşitli uygulama alanlarında günümüze kadar kullanılmıştır. • Çok verimsiz, dar uygulama alanları 50
  • 51. Prolog Örnek mother(ayşe, ali). father(mehmet, ali). father(kemal, mehmet). parent (X,Y) :- mother(X, Y). parent(X, Y) :- father(X, Y). grandfather(X, Z) :- parent (X, Y), father(Y,Z). grandfather(X, Z) :- (mother(X, Y); father(X,Y)), father(Y,Z). grandfather(kemal, ali)? 51
  • 52. Ada • ABD Savunma Bakanlığı tarafından gömülü (embedded) sistemler için geliştirilmiştir. (1974~1979) • Yüzlerce insan, çok para, ve yaklaşık sekiz yıl içeren muazzam tasarım çabası – Strawman gereksinimleri (Nisan 1975) – Woodman gereksinimleri (Ağustos 1975) – Tinman gereksinimleri (1976) – Ironman gereksinimleri (1977) – Steelman gereksinimleri (1978) • İlk programcı olarak bilinen Augusta Ada Byron’dan (1815-1851)sonra Ada adı verildi. 52
  • 53. Ada Değerlendirmesi • Katkılar – Paketler – veri soyutlama desteği – İstisna İşleme (Exception handling) - ayrıntılı – Soysal (Generic) program birimleri • Generic (Şablon, soysal) program birimleri sayesinde yazılımın yeniden kullanılabilmesini buluşma yeri (rendezvous) mekanizmasının ilavesiyle eşzamanlı çalışmayı desteklemektedir. – Eş zamanlılık (Concurrency) – görevleme (tasking) modeli ile – Blok yapılı – Büyük boyutlu yazılımlar için uygundur • Yorumlar – Rekabetçi tasarım – Yazılım mühendisliği ve dil tasarımı hakkında sonradan bilinen her şeyi içeriyordu – İlk derleyiciler çok zordu; ilk gerçekten kullanılabilen derleyici dil tasarımının tamamlanmasından yaklaşık beş yıl sonra geldi 53
  • 54. Ada Değerlendirmesi • Çok geniş ve çok karmaşık bir dil. (Özellikle yazım kuralları) • Çeşitli durumlara uygulanabilecek hazır şablonlara (template) sahiptir. • İlk sıralar ADA derleyicileri kod üretmekte verimsiz idi. • En çok gömülü sistemlerde başarılı olmuştur. • Veri tipleri konusunda çok zengindir. Çok-iş işleme özelliğine sahiptir. 54
  • 55. Ada 95 • Ada 95 (1988 de başladı) – Tip türetme (type derivation) üzerinden OOP desteği – Paylaşılan veri için daha iyi kontrol mekanizmaları – Yeni eş zamanlılık (concurrency) özellikleri – Daha esnek kütüphaneler – Altprogramların dinamik kapsam bağlama kurallarına göre çağrılması mekanizması da ADA 95’in özelliklerine katılmıştır • Popülerliği azaldı çünkü DoD daha fazla kullanımına ihtiyaç duymadı buna karşın C++ ‘ın popülaritesi arttı 55
  • 56. Ada Örnek with Text_To; use Text_To procedure hello is begin put("Hello World"); end hello package ArrayCalc is type Mydata is private; function sum return integer; procedure setval(arg:in integer); private size: constant:= 99; type myarray is array(1..size) of integer; type Mydata is record val: myarray; sz: integer := 0; end record; v: Mydata; end; package body ArrayCalc is function sum return integer is temp: integer; -- Body of function sum begin temp := 0; for i in 1..v.sz loop temp := temp + v.val(i); end loop; v.sz:=0; return temp; end sum; procedure setval(arg:in integer) is begin v.sz:= v.sz+1; v.val(v.sz):=arg; end setval; end; with Text_IO; use Text_IO; with ArrayCalc; use ArrayCalc; procedure main is k, m: integer; begin -- of main get(k); while k>0 loop for j in 1..k loop get(m); put(m,3); setval(m); end loop; new_line; put("SUM ="); put(ArrayCalc.sum,4); new_line; get(k); end loop; end; 56
  • 57. 2.15 Nesneye-dayalı Programlama: Smalltalk • Xerox PARC’da, önce Alan Kay, sonra Adele Goldberg tarafından geliştirildi • Bir nesneye-dayalı dilin ilk tamamen implementasyonu (veri soyutlama, miras (inheritance), ve dinamik tip bağlama (binding)) • Grafiksel kullanıcı arayüzü tasarımına öncülük etmiştir • Sadece bir dil değil, aynı zamanda yazılım geliştirme aracıdır • OOP ‘yi yükseltmiştir 57
  • 58. Smalltalk • İlk olarak Smalltalk-80 versiyonu Xerox dışında ticari amaçlı yazılımlarda kullanıldı. Halen yazılım geliştirimleri için yeni teknolojileri de içererek kullanılmaktadır. • Smalltalk tamamen nesne yönelimli olan ve ticari ilk programlama dilidir. • Geliştirme ortamı nesne yönelimli bir alt yapısı olması nedeni ile çok gelişmiştir ( tarayıcı, editör, debugger, açık kaynak kod). • Kaynak kodunun açık olması iyi bir eğitim ortamı haline gelmesini sağlamıştır. Diğer dillere göre çok basit bir sentaksı vardır ve Java gibi Geniş ve sürekli genişleyen bir programlama kütüphanesine sahiptir. Platform bağımsız bir dildir. • Bu dilde nesne yönelimli programlamanın 3 temel karakteristiği olan veri soyutlama (data abstraction), kalıtım (inheritance) ve dinamik bağlama(dynamic binding) kavramlarının hepsi bulunmaktadır. 58 Alan Kay
  • 59. 2.16 Zorunlu (Imperative) ve nesneye dayalı (Object-Oriented) özellikleri birleştirmek: C++ • Bell Labs’da Stroustrup tarafından in 1980 de geliştirilmiştir • C ve SIMULA 67 den geliştirilmiştir • Nesneye dayalı programlama olanakları, kısmen SIMULA 67’den alınmıştır • İstisna yakalama (exception handling) sağlar • Hem prosedürel (fonksiyona izin verir) hem de OO programlamayı desteklediği için geniş ve karmaşık bir dildir. • Popülaritesi OOP ile birlikte hızla artmıştır • ANSI standardı Kasım 1997’de onaylandı 59
  • 60. C++ • Çoklu miras alma desteklenmekte • Operatör ve metotların üstüste bindirilmesi desteklenmekte • Sınıflar ve metotlat template edilebilir. • Kuvvetli tip ayrımı, dinamik bellek yönetimi, hazır şablonlara sahip olma ve çok biçimlilik (polymorphism) özellikleri vardır. • C’de bulunan özelliklerin çoğu burada vardır. • PL/1 gibi geniş ve kompleks. • Ada ve Java’dan daha az güvenli • Microsoft’un sürümü (.NET le 2002 de çıkan): Yönetilmiş (Managed) C++ – Delegeler (delegates), arayüzler (interfaces), çoklu miras (multiple inheritance) yoktur 60
  • 61. Eiffel (Bertrand Meyer – 1992 de) • Direk olarak başka bir dilden geliştirilmemiştir • Imperative ve OO özellikleri birleştiren Hybrid PL • C++’tan küçük ve basittir, ama halen daha güçlüdür • C++ kadar popüler değildir çünkü birçok C++ hayranı önceden C programcılarıydı • Soyut veri yapılarını, kalıtımı ve dinamik bildirimleri destekler (OO) • Altprogram ve çağırıcı (caller) arasındaki iletişim için bildirimler (assertions) kullanır. • C++’dan daha küçük ve basittir. Fakat ifade edilebilirliği ve yazılabilirliği neredeyse eşittir. 61
  • 62. Delphi (Borland) • Pascal artı OOP yi destekleyen özellikler • C++’tan daha zarif, daha az kompleks ve güvenlidir • Emir esaslı ve OO PL’nin başarılı bir biçimde birleştirilmesidir. • Pascal’dan türemiştir. Bu yüzden, dizi elemanlarının kontrolünde, pointer aritmetiği ve tip zorlamalarında C ve C++’tan daha emniyetlidir. • Kullanıcı tanımlı operatörlere, generic altprogramlara ve parametize edilmiş sınıflara izin vermez. • Daha iyi ve daha kolay yazılım geliştirtme için bir Graphical User Interface (GUI) sağlamaktadır. 62
  • 63. 2.17 Bir Zorunlu nesneye-dayalı dil (Imperative-Based Object-Oriented): Java • 1990’ların başında Sun’da geliştirildi – C ve C++ gömülü electronik aygıtlar için yeterince memnun edici değildi • C++ temellidir – Önemli derecede basitleştirilmiştir (struct, union, enum, işaretçi (pointer) aritmetiği, ve C+ +’ın atama zorlamalarının yarısını içermez) – Sadece OOP yi destekler – Referansları vardır, işaretçiler (pointers) yoktur – Appletler ve bir eş zamanlılık (concurrency) formu için destek içerir 63
  • 64. Java Değerlendirmesi • C++’ın güvensiz özelliklerini elemiştir • Eş zamanlılık (Concurrency) özellikleri • Appletler için kitaplıklar, GUIler, veritabanı erişimi • Taşınabilir: Java Sanal (Virtual) Makinesi kavranı, JIT derleyiciler • WWW sayfaları için yaygın kullanılmaktadır • Diğer alanlarda kullanımı başka dillere oranla daha hızlı artmaktadır 64
  • 65. Java • Daha küçük, daha basit ve daha güvenilir bir PL tasarlamak üzere C++ tabanlı olarak geliştirilmiştir. • Java, basit, taşınabilir ve nesneye yönelik özellikte bir dildir. • Miras alma, çok biçimlilik, kuvvetli tip kontrolü, eş zamanlılık kontrolü, dinamik olarak yüklenebilen kütüphaneler, diziler, string işlemleri ve standart kütüphane gibi özellikleri vardır. • Bir Java programının temel yapısal bileşeni sınıftır. Bütün veri ve metotlar bir sınıf ile ilişkilidir. Global veri yada fonksiyon yoktur. • Hem referans değişkenleri ile hem de ilkel tiplerle erişilebilen sınıflara sahiptir. • C++’ta bulunan çoklu miras alma, operatörlerin üst üste bindirilmesi, ve makro önişlemcisi özellikleri Java’da yoktur. • Java’da şablon yapıları yoktur. İhtiyaç da minimuma inmiştir. 65
  • 66. Java • Pointer yoktur. Fakat bütün nesne sınıfları object adlı kök sınıftan miras almaktadır. • Records, union or enumeration tipler yoktur. • Prosedürel programlamayı desteklemez. • Sadece tekli miras almayı destekler fakat çok gelişmiş bir GUI’ya sahiptir. • İplik (threds) yapısına (bir pencere içerisinde yeni pencereler açılmasına izin var) sahip olduğundan eşzamanlılığı yönetmek kolaydır. • Çöp toplama (Garbage collection) nesneler için belleği en iyi kullanımı sağlar. • Tip dönüşümü kuvvetlidir. 66
  • 67. Java  Java tipik olarak platformdan bağımsız olarak byte kodları biçiminde derlenir. Daha sonra bu byte kodlar bir Java görüntü makinesi adı verilen bir Java yorumlayıcısı tarafından kullanılacağı platformun makine dilindeki koduna çevrilir. Derlenmiş Java sınıflarının taşınabilirliğini garantileyen bir özellik vardır. Oda .class format adı verilen Java byte-kod dosya formatının kesin olarak tanımlanmış olmasıdır.  Java “applet” adı verilen başka sistemler içinde gömülü programların geliştirilmesi için de kullanılmaktadır. Bu appletler Internet Explorer yada Netscape gibi web tarayıcı programlar içerisinde kullanılabilir.  Java internet ve web programcılığında yaygın olarak kullanılmaktadır. 67
  • 68. Java Örnek class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); //Display the string. } } import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } 68
  • 69. 2.18 Ağ (Web) için Betik Diller (Scripting Languages): • Perl – ALGOL ile sadece C üzerinden ilişkilidir – Bir yazı (scripting) dilidir • Bir yazı dosyası (script file) çalıştırılacak komutları içerir • Diğer örnekler: sh, awk, tcl/tk – Larry Wall tarafından geliştirilmiştir – Perl değişkenleri statik tiplidir ve örtülü (implicitly) tanımlanmıştır • Üç farklı isim alanı (namespace), bir değişkenin adının ilk karakteriyle gösterilir – Güçlü fakat tehlikeli – Genel amaçlı bir dil olarak yaygın kullanılmaktadır – Web CGI programlama için yaygın kullanımı kazanmış – Ayrıca UNIX sistem yönetimi dil için yedek olarak kullanıldı 69
  • 70. • JavaScript – Netscape ve Sun Microsystems ortaklığı – Web programlamada (istemci tarafı-client side) dinamik HTML dökümanları oluşturmak için kullanılır – Tamamen yorumlayıcıdır – Java ile sadece benzer sentaksı nedeniyle ilgilidir – Netscape ve Sun Microsystems ‘in ortak çalışmaları sonucu 1995’de üretilmiştir. Orijinal adı “LiveScript”tir. – Dil bileşenlerinin içinde, web sayfalarının çeşitli kısımlarını ve özellikle HTML’i işleyecek ve kontrol edecek çeşitli olanaklar vardır. – Javanın veri tipleri bakımından sert kısıtlamalarına karşılık, (Örn.Bütün değişken tipleri derleme zamanında belirlenir), Javacript bu açıdan toleranslıdır.( dynamik olarak tipleme) – Java’nın HTML ile çalışma desteği zayıf iken, Javacript’in bu konudaki desteği tamdır. – Javascript nesneye yönelik ve blok-yapısal özellikte bir dildir. 2.18 Ağ (Web) için Betik Diller (Scripting Languages): 70
  • 71. • PHP (Personal Home Page) – PHP: Hypertext Preprocessor – Rasmus Lerdorf tarafından 1994’te tasarlandı – Web uygulamaları (sunucu tarafı-server side) için kullanılır; • Genellikle Web üzerinden form işleme ve veritabanı erişimi için kullanılan bir sunucu tarafı HTML içine gömülü bir betik dilidir • Çıktı olarak HTML kodu üretir – Bir HTML dökümanı, okuyucu, hiper linkler boyunca diğer HTML dökümanlarına götürecek biçimde programlanabilir. – Gömülü bir HTML belgesi browser tarafından istendiğinde PHP kodu Web server üzerinde yorumlanır. – PHP’nin dizi yapısı JavaScript ve Perl dizi yapılarının bir birleşimidir. – PHP ile form erişimi oldukça kolaydır. – Tamamen yorumlayıcıdır 2.18 Ağ (Web) için Betik Diller (Scripting Languages): 71
  • 72. • Python – Nesne tabanlı yorumlayıcıya sahip bir metin dilidir – Tip kontrol edilir ama dinamik yazılır – CGI programlama ve form işleme için kullanılır – Dinamik yazılabilir, ancak tipi kontrol edilir – Listeleri, değişkenler gurubu ve karmaları destekler • Lua – Nesne tabanlı yorumlayıcıya sahip bir metin dilidir – Tip kontrol edilir ama dinamik yazılır – CGI programlama ve form işleme için kullanılır – Dinamik yazılabilir, ancak tipi kontrol edilir – Listeleri, değişkenler gurubu ve karmaları destekler, bütün bunları onun tek veri yapısı ve tabloları üzerinden yapar – Kolayca genişletilebilir 2.18 Ağ (Web) için Betik Diller (Scripting Languages): 72
  • 73. • Ruby – Yukihiro Matsumoto (a.k.a, “Matz”) tarafından Japonya’da tasarlandı – Perl ve Python için yedek bir dil olarak başladı – Bir saf nesne yönelimli bir (Script) dil - Tüm veriler nesnedir – Birçok operatör kullanıcı kodu tarafından yeniden tanımlanabilen metotlar olarak uygulanır – Sade yorumlayıcıdır 2.18 Ağ (Web) için Betik Diller (Scripting Languages): 73
  • 74. 2.19 Yeni milenyum için C-temelli bir dil: C# • .NET geliştirme platformunun bir parçasıdır • C++ , Java, ve Delphi temellidir • Bileşen-temelli (component-based) yazılım geliştirme için dil sağlar • Bütün .NET dilleri (C#, Visual BASIC.NET, Managed C++, J#.NET, ve Jscript.NET) Ortak Tip Sistemi(Common Type System (CTS)) kullanır, bu ortak bir sınıf kütüphanesi sağlar • Yaygın kullanıma ulaşmıştır. 74
  • 75. C# • C ve C++ dil ailesinin ilk bileşen yönelimli (Component- oriented) dilidir. • C ve C++’dan derlenmiş, basit, modern, nesne yönelimli ve tür güvenli bir programlama dilidir. • Yüksek başarımlı Common Language Runtime (CLR); bir yürütme motoru, bir çöp toplayıcı (garbage collection), anında derleme, bir güvenlik sistemi ve zengin bir sınıf çerçevesi (.NET Framework) içerir. CLR temelden, birden çok dil desteğine kadar herşey için tasarlanmıştır. • CLR’ı hedef alan diller: Visual C#, Visual BASIC .NET, Managed C++, J#.NET ve Jscript.NET • Common Language Specification, CLS, dil işlevselliğinin yaygın bir düzeyini tanımlar. .NET Framework işlevselliğine tam erişim ve ve diğer uyumlu dillerle zengin birlikte çalışabilirlik vardır 75
  • 76. C# • C# otomatik bellek yönetimini kullanır. C# tür sistemi işaretçi türleri ve nesne adreslerinin doğrudan değiştirilmesine de izin verilir. • C# tür sistemi bileşiktir. Her şey bir nesnedir. Kutulama ve kutuyu açma gibi kavramların yenilikçi kullanımı ile C#, her veri parçasının bir nesne olarak değerlendirilmesine olanak sağlayarak, değer türleri (value type) ve başvuru türleri (reference type) arasındaki açığı kapatır. 76
  • 77. 2.20 İşaretleme(Markup)/Programlama Hibrit Diller • XSLT – eXtensible Markup Language (XML) (genişletilebilir işaretleme dili): bir metamarkup dili – eXtensible Stylesheet Language Transformation (XSTL) (genişletilebilir stilsayfası dil dönüşümü) XML dökümanlarını görüntülenebilmesi için dönüştürür – Programlama yapıları (örn., döngüler) • JSP – Java Server Pages (Java Sunucu Sayfaları): dinamik web dökümanlarını destekleyen teknolojiler koleksiyonu – servlet: bir Web servera ait bir Java programı; servlet’in çıktısı browserda görüntülenir 77