Upload
others
View
50
Download
0
Embed Size (px)
Citation preview
5. Hafta - PROGRAMLAMA DİLLERİ ve
VERİ YAPILARI
Dr. Öğr. Üyesi Nesibe YALÇIN https://nesibeyalcin.wordpress.com/bsm102/
BARTIN ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
2
Tanımlar
― Program: Belirli bir işi gerçekleştirmek için gerekli komutlar
dizisi olarak tanımlanabilir.
― Programlama: Bir programı oluşturabilmek için gerekli komutların belirlenmesi ve uygun biçimde kullanılmasıdır.
― Programlama Dilleri: Bir programın oluşturulmasında kullanılan komutlar, tanımlar ve kuralların belirtildiği programlama araçlarıdır.
― Yazılım: Belirli bir amacı sağlayan, program ya da programlar ve ilgili dokümantasyonlardır.
3
4
Programlama Dilleri
― Programlama dilleri, yazılım geliştirmenin önemli bir
parçasıdır.
― Bilgisayarlara ne yapmaları gerektiğini söylememizi sağlayan özel bir dil.
― Programlama dilleri insanlarla bilgisayarlar arasında tercümanlık görevi yapar.
― Her programlama dili diğerinden farklıdır. Her birinin farklı komutları ve kuralları mevcuttur.
5
Programlama Dilleri
6
Programlama Ortamı
― Bir programlama ortamı, programlama dili ile birlikte birçok bileşenden oluşur.
7
Programlama Ortamı
― Editör (Editor): Kaynak kodu oluşturmak, kodda değişiklik yapmak için gerekli araçtır.
― Yorumlayıcı (Interpretter): Programın kaynak kodunu doğrudan satır satır yürütür.
― Derleyici (Compiler): Kaynak kodu makine koduna çevirir, .exe dosyası üretir.
― Hata Ayıklayıcı (Debugger): Programın yürütülmesini adım adım kontrol etmeye yarar.
8
Programlama Ortamı
― Derleyicinin kaynak kodu makine koduna çevirme işlemi genellikle üç adımdan oluşur:
• Sözel Analiz’ de kaynak kodları oluşturan kelimelerin kaynak dilde karşılıkları olup olmadıkları kontrol edilir.
• Yazım Hatası Analizi’ nde kaynak kodların yazıldığı programlama dilinin kurallarına uygun yazılıp yazılmadığı kontrol edilir.
• Kod Üretimi’ nde kaynak komutlara karşılık gelen makine dili komutları üretilir.
9
Programlama Ortamı
― Kütüphane (Library): Nesne dosyalarından oluşan kütüphanedir.
― Bağlayıcı (Linker): Programdaki tüm nesne dosyalarını birleştirip tek dosya haline getirir.
― Yükleyici (Loader): Yürütülebilir (.exe) dosya ile birlikte bu dosyanın kullandığı kütüphaneleri belleğe yükler.
10
Programlama Ortamı
11
Programlama Dilinin Elemanları
― Söz Dizimi (Syntax) • Sıradan dillerde olduğu gibi, programlama dillerinin de bir
söz dizimi vardır. • Bir programın söz dizimi simgelerin geçerli olarak kabul
edilebilmesi için hangi düzende yazılması gerektiğini belirleyen kurallar dizisidir.
• Sözdizimsel hataların çoğu derleyici tarafından yakalanıp raporlanacaktır. Ancak bazı hatalar derleyicilerin yakalayamayacağı türden olup çalışma esnasında hatalara neden olabilir.
12
Programlama Dilinin Elemanları
― Anlambilim (Semantics) • Bir programlama dilindeki bir ifadenin ne anlama
geldiğidir.
― Veri (Data) • Verinin yapısı ve türü belirlenmelidir. • Tür program içinde kullanılacak verinin alabileceği
değerleri belirler.
― Atama Deyimi (Assignment Statement) • Deyimin sağ tarafındaki ifadenin değerini hesaplayarak,
bulduğu değeri sol taraftaki ifadeye aktarır.
13
Programlama Dilinin Elemanları
― Kontrol Deyimleri (Control Statement) • Atama deyimleri normal olarak yazıldığı şekilde
yürütülürken, kontrol deyimleri yürütmenin sırasını değiştirmek için kullanılır.
• İyi yapılandırılmış bir kontrol deyimi iki şekilde olabilir: İki yada daha fazla seçenekten birinin seçilmesi (if ya da case) Tekrarlı ifadelerin çevrim durumları (for –while-repeat)
14
Programlama Dilinin Elemanları
― Alt Programlar (Subprograms) • Programın farklı yerlerinden defalarca çağrılabilen, içinde
veri tanımlamalarının ve yürütülebilir deyimlerin bulunduğu program birimleridir.
15
Programlama Dilini Değerlendirme Ölçütleri
― Verimlilik (efficiency) ― Veri türleri ve yapıları (data types and structures) ― Alt programlama yeteneği (Modularity) ― Yapısallık (structural programming support) ― Esneklik (flexibility) ― Öğrenme ve öğretme kolaylığı (pedagogy) ― Genellik (generality) ― Giriş / Çıkış (input/output - I/O facility) kolaylığı ― Okunabilirlik (readability) ― Taşınabilirlik (portability) ― Nesne Yönelimlilik (object orientation)
16
Programlama Dillerinin Tarihçesi
― 1940’lar
• 40’lı yıllarda geliştirilen ilk elektronik bilgisayarlar için assembly dili ile programlar geliştirilirken, bu dilin kullanımının zor olduğu görülmüş ve sentaksı doğal dile daha yakın olan programlama dilleri geliştirilmiştir.
• Konrad Zuse 1943-1945 yılları arasında Plankalkül adında bir programlama dili geliştirmiştir. Fakat o yıllarda bu dil için bir derleyici tasarlanmamıştır.
• Alan Turing, John von Neumann, John Mauchly, J. Presper Eckert ve Herman Goldstine tarafından geliştirilmiş olan ENIAC Coding System ilk programlama dillerinden biri olarak kabul edilir.
17
Programlama Dillerinin Tarihçesi
― 1950’lar
• Makine dili kullanımın getirdiği problemleri (???) ortadan kaldırmaya yönelik çalışmalar yoğunlaştı.
• 1951 yılında UNIVAC I projesinde çalışan Grace Hopper ilk derleyiciyi tasarlamıştır.
• FORTRAN (FORmula TRAslator), 1954-1955 yıllarında IBM bilgisayaı için tasarlanmıştır.
• LISP, MIT’ de çalışan John McCarthy tarafından 1956-1958 yılları arasında geliştirilmiştir.
• ALGOL (1958), COBOL (1959)
18
Programlama Dillerinin Tarihçesi
― 1960’lar
• Oslo’daki Norveç Hesaplama Merkezi tarafından 1962-1967 yılları arasında geliştirilen Simula ilk nesneye-yönelik programlama dilidir.
• 1964 yılında John George Kemeny ve Thomas Eugene Kurtz tarafından BASIC (Beginner's All-purpose Symbolic Instruction Code) dili geliştirilmiştir.
• PASCAL dili Niklaus Wirth tarafından 1968-1969 yılları arasında geliştirilmiş ve 1970’te yayınlanmıştır.
19
Programlama Dillerinin Tarihçesi
― 1970’lar
• C programlama dili 1972 yılında Bell Laboratuarlarında Dennis Ritchie tarafından geliştirilmiştir (Dennis Ritchie daha önce Ken Thompson ile birlikte UNIX işletim sistemi ve B programlama dili üzerinde de çalışmıştır).
• Prolog dili de 1972 yılında Alain Colmerauer ve Phillipe Roussel tarafından Fransa’da geliştirilmiştir.
20
Programlama Dillerinin Tarihçesi
― 1980’lar
• 1979 yılında Bjarne Stroustrup tarafından geliştirilmeye başlanan C++ dili 1983 yılında tamamlanmıştır.
• 1986 yılında Bertrand Meyer tarafından geliştirilen Eiffel programlama dili, C++ gibi nesneye yönelik bir dildir.
• 1987 yılında Larry Wall tarafından geliştirilen Perl dili, metin işleme ve görüntü tanıma söz konusu olduğunda kullanılabilecek en güçlü dillerden biridir.
21
Programlama Dillerinin Tarihçesi
― 1990’lar
• Windows tabanlı uygulama geliştirmeyi sağlayan Visual Basic 1.0, Microsoft tarafından 1991 yılında piyasaya sürüldü. (1998 yılına kadar 5 faklı sürüm daha geliştirildi).
• Java dili, Sun Microsystems mühendislerinden James Gosling tarafından geliştirildi ve 1995 yılında ilk sürümü (1.0) yayınlandı.
• Dinamik web sayfalarının yaratılmasında kullanılan PHP (Personal Home Page) dili Rasmus Lerdorf tarafından 1995’te yaratıldı.
22
Programlama Dillerinin Tarihçesi
― 2000’ler
• 2000’li yıllarda Web Tabanlı Programlama giderek yaygınlaşmış, ASP, JSP ve PHP dilleri sürekli olarak yenilenmiştir.
• .NET çatısı altında çalışan C# (C Sharp), VB.NET ve ASP.NET programlama dilleri 2001 yılında Microsoft tarafından piyasaya sürülmüştür.
23
Top 10 Programlama Dilleri (2014)
24
Top 10 Programlama Dilleri (2018)
25
Top 10 Programlama Dilleri (2018)
26
― Programlama dilleri ilk olarak belirli bir programa belirli bir işi yapmak için talimatların adım adım bilgisayara girilmesi şeklinde ortaya çıkmıştır.
― Daha sonraki zamanlarda programlama dilleri mantıksal dallanma, nesne yönelimi gibi özellikler kazanarak gelişim göstermiştir.
Programlama Dillerinin Sınıflandırılması
27
― Uygulama Alanlarına Göre Sınıflandırma • Genel Amaçlı Programlama Dilleri
C, C++, Java, Pascal, Basic • Bilimsel ve Mühendislik Dilleri
Fortran, C, C++, Pascal, Java • Sistem Programlama Dilleri
C, C++, Java, Assembly, Makine Dili • Veri Tabanı Dilleri
Dbase, Clipper, Sql • Yapay Zeka Dilleri
Prolog, LISP
Programlama Dillerinin Sınıflandırılması
28
Programlama Dillerinin Sınıflandırılması
― Seviyelerine Göre Sınıflandırma • Düşük Seviyeli
Assembly (ASM) • Orta Seviyeli
C, C++, C# • Yüksek Seviyeli
Fortran, Basic, Pascal, Cobol • Çok Yüksek Seviyeli
Dbase, Clipper, VB, Java, Delphi, SQL, Mathematica • Yapay Zekaya Yönelik
Prolog, Phyton, Mercury, OPS5
29
Makine Dili
― Makine dili, bilgisayarın ana dilidir. Bir programın bilgisayar tarafından anlaşılması için o dilin söz diziminin ve anlamının makine diline çevrilmesi gereklidir.
30
Düşük Seviyeli Diller
― Assembly org 100h mov cx,10 ;cx e 10 aktar mov bx,0 ;bx e 0 aktar sonuc: dec cx ;cx 1 azalt mov ax,cx ;ax e cx i aktar mul cx ;ax*cx carp , ax de karesi tutuluyor add bx,ax ;ax+bx ve bx e aktar loop sonuc end
31
Düşük Seviyeli Diller
― Assembly
32
Orta Seviyeli Diller
― C #include <stdio.h> int main() { printf("merhaba, dünya"); return 0; }
33
Yüksek ve Çok Yüksek Seviyeli Diller
― Pascal
program merhaba(output); begin WriteLn('merhaba, dünya'); end.
― VB
Private Sub Button1_Clicked() Handles Button1.Click MsgBox("Merhaba, Dünya!") End Sub
34
Yapay Zekaya Yönelik Diller
― Prolog
― LISP (List Processing)
(defun a() (setq b 5) (setq c 6) (setq d (+ b c)) (print d))
35
Nesneye Yönelik Programlama
― Programlar, gerçek hayatta karşılaşılan bir takım problemlerin çözülmesi için bilgisayarların hızlı ve doğru işlem yapabilme yeteneklerinden faydalanmak üzere yazılırlar.
― Nesneye Yönelik Programlama (Object Oriented Programming) yaklaşımı, gerçek hayattan alınmış problemi çözmek üzere oluşturulacak modelin, yine gerçek hayatta var olan nesneler ve bu nesneler arasındaki ilişkilerden faydalanılarak oluşturulmasını ilke edinmiştir.
― Uygulamaları nesneler kullanarak yani bir çok nesnenin bir araya gelmesi ile oluşturmak demektir.
36
Nesneye Yönelik Programlama (NYP)
― Nesne Yönelik Programlama, programların boyutunu düşürür, karmaşıklığı giderir, geliştirmeyi kolay hale getirir ve bakım maliyetlerinin düşmesine yardımcı olur.
37
Nesneye Yönelik Programlama (NYP)
― Sınıf, aynı özellik ve davranışları sergileyen varlıkların ortak kümesini belirleyen tanımdır.
― Nesne ise ait olduğu sınıftan gelen özelliklerin değerlerinin belli olduğu, sınıfı için tanımlı olan davranışları nasıl sergilediğinin bilindiği, somut olarak var olan, biricik bir kimliği olan varlıktır.
38
Görsel Programlama
― Grafik Kullanıcı Arayüzü (GUI) kullanan Windows, Linux gibi işletim sistemleri için uygulama geliştirmeye yarar.
― Pencere içinde yer alan metin kutuları, butonlar, tablolar gibi elemanları program kod yazmadan direkt pencere üzerine yerleştirmeye imkan tanır.
39
Görsel Programlama
40
Web Programlama
― Bir web programlama dili ve veritabanı ile web üzerinde dinamik sayfalar oluşturmayı amaçlar.
― Alışveriş siteleri, haber siteleri, forum siteleri ve bunlar gibi bir çok site web programlama ile oluşturulur.
― Programlama Dilleri;
• PHP • ASP.NET
― Veritabanları; • MySQL • Oracle • Access
41
Mobil Programlama
― Mobil programlama dili ile telefon, tablet, PDA gibi mobil cihazlarda da kullanılacak bir takım yazılımlar, programlar ve oyunlar oluşturmayı amaçlar.
― Mobil uygulama geliştirmek için en çok kullanılan mobil programlama dilleri;
• C • C++ • Objective-C • Java • HTML5 • Swift
42
Mobil Programlama
43
Assembly
• Assembly, makine diline en yakın dildir. Yazım kolaylığı makine diline göre daha fazladır.
• Programlama için günümüzde belki de en az kullanılan bilgisayar dilidir.
• C ile karşılaştırıldığında Assembly, daha az komut sayısına ancak daha geniş komut kullanım yapısına sahiptir.
44
Assembly
format mz org 100h mov ah,09 mov dx,yazi int 21h mov ah,00 int 16h int 20h yazi db "merhaba dunya$"
Akümülatör register
45
C++
• Bell Laboratuvarları’ ndan Bjarne Stroustrup tarafından 1979 yılından itibaren geliştirilmeye başlanmış ve 1983’ te ortaya çıkmıştır.
• Nesne yönelimli ve yüksek seviyeli, genel amaçlı bir programlama dilidir.
• C++’ın ilk ismi “C with classes” dir ve C programlama dilinin bir eklentisi olarak işlev görmektedir.
• Günümüzde en çok kullanılan dillerden biridir.
46
C++
#include <iostream> using namespace std; int main() { cout << " Merhaba Dünya"<< endl; return0 }
47
Java
• 1995 yılında piyasaya sürülen Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmiştir.
• Açık kodlu, nesneye yönelik, ortamdan bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (interpreted) bir dildir.
• Java ile birden fazla görev yapabilecek düzeyde programlar yazmak olanaklıdır.
• İşaretçi kullanımı yoktur.
48
Java
class merhaba { public static void main(String args[]) {
System.out.println("Merhaba Dünya!"); } }
49
C#
• C++ ve JAVA’nın iyi yönlerini bünyesinde barındıran yeni bir dildir (2001).
• Bu dilin tasarlanmasına Pascal, Delphi derleyicileri ve J++ programlama dilinin tasarımlarıyla bilinen Anders Hejlsberg liderlik etmiştir.
• Microsoft tarafından .NET çatısı üzerinde geliştirilen C#, JAVA’ ya en önemli rakip olarak görülmektedir.
• C# görsel programlamaya da olanak sağlar.
50
C#
using System; class Program { static void Main() { Console.WriteLine("Merhaba Dünya!"); Console.ReadKey(); } }
51
Python
• Python, nesne yönelimli, yorumlamalı, birimsel ve etkileşimli yüksek seviyeli bir programlama dilidir.
• Python, ilk sürümü Guido van Rossum adlı Hollandalı bir programcı tarafından 1991’de ortaya konulmuştur.
• Her platformda (Windows, MacOS, Unix, Linux,…) çalışabilen bir Python derleyicisi vardır.
• Açık kaynaklı, yapısı sade, okuması ve yazması çok kolay. Çok hızlı öğrenilebiliyor.
52
Python
― print("Merhaba Dünya")
53
VERİ YAPILARI
54
Veri
― Veri, bilgisayar ortamında sayısal, alfasayısal veya mantıksal biçimlerde ifade edilebilen her türlü değer tanımıyla ifade edilebilir.
― Örneğin;
• Tamsayılar: 10, -2, 0 • Gerçel sayılar: 27.5, 0.0256, -65.253 • Karakterler: 'A', 'B', '*' • Stringler: "Yağmur" ve, "Merhaba" • Mantıksal değerler: 0, 1 ya da true, false
55
Veri Tipleri
56
Bilgi
― Veriler bilgisayar belleğinde 1 ve 0’lardan oluşan bir "Bit" dizisi olarak saklanır.
― Bilgi, verinin işlenmiş ve bir anlam ifade eden halidir.
57
Veri Yapıları
― Programlamada veri yapıları en önemli unsurlardan birisidir.
― Veri yapıları, kendi oluşturulma kuralları ve özel işlemleriyle nitelendirilebilir veriler kümesidir. Bazı hallerde bunlara veri tipleri de denir.
― Program kodlarını yazarken kullanılacak veri yapısının en ideal şekilde belirlenmesi, belleğin ve çalışma biçiminin daha etkin kullanılmasını sağlar.
58
Veri Yapılarının Sınıflandırılması
59
Veri Yapılarının Sınıflandırılması
1.TEMEL: Daha küçük parçalara bölünemeyen veri yapılarıdır. 2.BASİT: Temel veri tiplerinin birleşmesinden oluşan veri yapılarıdır. 3. BİRLEŞİK: Verilere bellek yönetimi ile ulaşan ve veriler üzerinde kapsamlı işlemler yapabilen veri yapılarıdır.
a. Lineer: Verilerin birbirini doğrusal olarak takip ettiği (bir verinin öncesi ve sonrası olması) veri yapılarıdır.
b. Lineer Olmayan: Verilerin birbirini özel kurallar dahilinde takip ettiği veri yapılarıdır.
60
Veri Yapılarının Sınıflandırılması
Çift yönlü bağlı liste
61
Veri Yapılarının Sınıflandırılması
Ağacın genel yapısı
62
Veri Yapılarının Sınıflandırılması
Yönsüz graf örneği