Bölüm 1 Giriş.

Slides:



Advertisements
Benzer bir sunumlar
NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar
Advertisements

.NET FRAMEWORK -MASAÜSTÜ VE SUNUCU YAZILIMLARI
SGB.NET’İN TEKNİK ALTYAPISI
Yazılım Geliştirme ve Java
Bilgisayar Programlama I
Algoritma ve Akış Diyagramları
.NET FRAMEWORK.
C Programlama Diline Giriş
Önemli Programlama Dillerinin Gelişimi
Bölüm 1 Hazırlık.
İfadeler ve Atama İfadeleri
Bilgi Teknolojisinin Temel Kavramları
Bölüm 5 – Kontrol İfadeleri : 2.Kısım
4 Kontrol Yapıları: 1.Bölüm.
Yazılım Mühendisliği Bölüm - 6 Gerçekleştirim
TEMEL BİLGİSAYAR BİLİMLERİ
Burcu Musaoğlu Data Sistem A.Ş..
Bölüm 1: Introductions (Tanıtım,Tanım)
Bölüm 1 Giriş.
NESNEYE DAYALI MODELLEME VE TASARIM
Bölüm 3 – Yapısal Programlama
NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ
TEMEL BİLGİSAYAR BİLİMLERİ
Yazılım Proje Yönetimi
PROGRAM GELİŞTİRME 1.HAFTA.
Görsel C# ile Windows Programlama
Bilgisayar Programlama
Görsel Programlama Dr. Muhammet Balcılar
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
Bölüm 2 – Kontrol Yapıları
DEĞİŞKENLER VE VERİ TİPLERİ
BİLGİ TEK. VE ALG. GİRİŞ YRD.DOÇ.DR. BUKET DOĞAN 1.
C’nin Kısa Tarihçesi C AT&T laboratuarlarında 70’li yıllarının başında Dennis Ritchie tarafından tasarlanmıştır. Ritchie o yıllarda B adlı programlama.
GİRİŞ Yard.Doç.Dr. Cihad Demirli Sunu içeriği kaynağı: ALGAN, S. (2010). Her Yönüyle C# 4.0. (12.Baskı). Pusula Yay. İstanbul.
NESNEYE-YÖNELİK PROGRAMLAMA
Quest Atlantis Dünya Üzerine Yayılmış Çok-Kullanıcılı Çevrim-İçi Eğitsel Bir Bilgisayar Oyununun Teknik Yapısı.
Bölüm 4 – C’de Program Kontrolü
BİLGİ TEK. VE ALG. GİRİŞ YRD.DOÇ.DR. BUKET DOĞAN 1.
Ana Programlama Dillerinin Evrimi
1 Öğr. B.Aliyeva Öğr. B.Aliyeva Bilgisayar Yazılımı.
Nesne tabalı Programlamaya giriş
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Bilgi Teknolojisinin Temel Kavramları
Programlama Dilleri Visual Basic C# C++ Pascal Delphi.
Modül 1: Giriş. Genel Bakış Temel.NET kavramları Geliştirme ortamında gezinti Bir C# projesi oluştur Use Visual Studio.NET Veriye eriş Hata ayıkla ve.
İsimler ve Bağlanma Names and Bindings
Bölüm 1: Giriş.
Ders 2 Algoritma İfade Şekilleri
Genel Kavramlar Bölüm - 1. YAZILIM Bilgisayara işlemler yaptırabilmek ve karar verdirtebilmek için yazılan kalıplara denir. Yazılım, genel olarak donanım.
Barış Ceviz Yazılım Geliştiricisi Yazılım, Yazılımcı, Yazılım Dilleri.
Değişkenler Sabitler İşlemciler İfadeler Deyimler 1 Programlama Dillerinin Temel Elemanları (Hafta5) BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
Bilgisayar Mühendisliğindeki Yeri
Programlama Laboratuarı-I DERS - 3 Program Geliştirme Derleyici ve DevC++ Derleyicisi.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Dili Çağdaş Hakan Aladağ.
Bilgisayar Donanım ve Sistem Yazılımı
Programlama Dillerinin Temel Elemanları
METHODLAR VE KOŞULLAR.
PROGRAMLAMA TEMELLERİ
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
1- C# Hello world Nesne Yönelimli Programlama - i
Bölüm1 İlk Bilgiler.
Bilgisayar Bilimi Problem Çözme Süreci-2.
Bilgisayar Mühendisliğine Giriş
Problem Çözme ve Algoritmalar
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
NİŞANTAŞI ÜNİVERSİTESİ
Dünya Üzerine Yayılmış Çok-Kullanıcılı Çevrim-İçi Eğitsel
Sunum transkripti:

Bölüm 1 Giriş

Bölüm 1 Konular Programlama Dilleri Kavramlarını Öğrenmenin Nedenleri Programlama Alanları Dil Değerlendirme Kriterleri Dil Tasarımını Etkileyen Faktörler Dil Kategorileri Dil Tasarımında Verilen Ödünler(Trade-Offs) İmplementasyon Metotları Programlama Platformları(Environments) Copyright © 2006 Pearson Addison-Wesley. All rights reserved.

1.1 Programlama Dilleri Kavramlarını Öğrenmenin Nedenleri Fikirleri ifade etme yeteneğinin arttırılması Uygun dilleri seçebilme bilincinin geliştirilmesi Yeni diller öğrenebilme yeteneğinin geliştirilmesi İmplementasyonun öneminin daha iyi anlaşılması Bilgisayar biliminde kapsamlı ilerleme

1.2 Programlama Alanları Bilimsel Uygulamalar Ticari Uygulamalar Çok sayıda kayan nokta(floating point) hesaplamaları Fortran Ticari Uygulamalar Rapor üretmek, ondalık sayılar ve karakterler kullanmak COBOL Yapay Zeka (Artificial intelligence) Sayılar yerine semboller işlenir LISP Sistem programlama Devamlı kullanım nedeniyle verimlilik gereklidir C Web Yazılımı Dillerin seçmeci/derlemeci(eclectic) koleksiyonu: işaretleme(etiketleme)(markup) (örn, XHTML), betik(scripting) (örn, PHP), genel-amaçlı(örn, Java)

1.3 Dil Değerlendirme Kriterleri Okunabilirlik(Readability): programların okunabilme ve anlaşılabilme kolaylığı Yazılabilirlik(Writability): Bir dilin program yazmada kullanılabilme kolaylığı Güvenilirlik(Reliability): şartlara(specifications) uygunluk (yani, şartları sağlaması) Maliyet(Cost): en son toplam maliyet

Değerlendirme Kriterleri : Okunabilirlik Genel Kolaylık Kullanışlı nitelikler(features) ve yapılar(constructs) kümesi Özellik çokluğu(feature multiplicity)(aynı işi yapmanın birkaç tane yolu olması) Minimum operatör aşırı yükleme(operator overloading) Ortogonallik(Orthogonality) Temel yapıların(primitive constructs) sayısı ne kadar azsa bu yapılarla o kadar az kombinasyon yapılabilir Her mümkün kombinasyon kurallara uygundur Kontrol ifadeleri(Control statements) Belli başlı kontrol yapılarının (control structures) olması (örn., while ifadesi) Veri tipleri(data types) ve yapıları (data structures) Veri yapılarını tanımlamak için yeterli imkanların olması Sentaks(Sözdizimi--Syntax) Tanıtıcı/kimlik belirtici(Identifier) biçimleri : esnek kompozisyon özel kelimeler ve metotlarla bileşik ifadeler oluşturma Biçim ve anlam: kendini-açıklayan yapılar, anlamlı anahtar sözcükler(keywords)

Değerlendirme Kriterleri : Yazılabilirlik Basitlik ve ortogonallik(dikeylik/bağımsızlık)(orthogonality) Az sayıda yapı (constructs), az sayıda temel öğeler(primitives), bunları birleştirmek için az sayıda kurallar kümesi Soyutlama(abstraction) desteği Karmaşık yapıları veya işlemleri, ayrıntıları gözardı ederek tanımlayabilme ve kullanabilme yeteneği Anlamlılık(Açıklayıcılık)(Expressivity) İşlemleri belirtmenin nispeten elverişli yolları Örnek: Birçok modern dilin for ifadesini içermesi

Değerlendirme Kriterleri : Güvenilirlik Tip Kontrolü(Type checking) Tip hataları(errors) için test etme İstisna İşleme (Exception handling) Yürütme zamanı(run-time) hatalarını yakalama ve düzeltme önlemleri alır Farklı Adlandırma(Aliasing) Aynı bellek konumu için iki veya daha fazla farklı referans metodunun(referencing method) varlığı Okunabilirlik ve yazılabilirlik Bir algoritmayı ifade etmenin “doğal” yollarını desteklemeyen bir dil, ister istemez “doğal olmayan”, bu yüzden güvenilirliği azalmış yaklaşımları kullanacaktır.

Değerlendirme Kriterleri : Maliyet Dili kullanacak programcıların eğitilmesi Programları yazma (özel uygulamalara yakınlık) Programları derleme(compiling) Programları yürütmek (executing) Dil implementasyon sistemi: ücretsiz derleyicilerin(compilers) kullanılabilirliği Güvenilirlik(Reliability): zayıf güvenilirlik yüksek maliyetlere yol açar Programların bakımı(maintaining)

Değerlendirme Kriterleri: Diğerleri Taşınabilirlik (Portability) Programların bir implementasyondan diğerine taşınabilme kolaylığı Genellik (Generality) Çok çeşitli uygulamalarda uygulanabilirliği olması İyi-tanımlanmış olması(Well-definedness) Dilin resmi tanımının kesinliği(doğruluğu)(precision) ve tamamlanmış olması(completeness)

1.4 Dil Tasarımını Etkileyen Faktörler Bilgisayar Mimarisi(Computer Architecture) Diller, von Neumann mimarisi olarak bilinen yaygın bir bilgisayar mimarisi etrafında geliştirilir Programlama Metodolojileri Yeni yazılım geliştirme metodolojileri (örn., nesneye-dayalı(object-oriented) yazılım geliştirme) yeni programlama örneklerine bunların sonucunda da, yeni programlama dillerine yol açtı.

Bilgisayar Mimarisi Etkisi Ünlü bilgisayar mimarisi: Von Neumann Von Neumann bilgisayarları nedeniyle imperatif diller(imperative languages) hakimdir Veri ve programlar bellekte saklanır Bellek, CPU’dan ayrıdır Komutlar ve veri bellekten CPU’ya iletilir(pipe) İmperatif dillerin temelleri Değişkenler(variables) bellek hücrelerini modeller Atama ifadeleri(Assignment statements) iletimi(piping) modeller İterasyon (iteration) verimlidir

Von Neumann Mimarisi Veri ve komutlar Bellek(komutları ve veriyi saklar) İşlemlerin sonuçları Veri ve komutlar Girdi ve çıktı aygıtları

Programlama Metodolojileri Etkileri 1950’ler ve 1960’ların başlangıcı: Basit uygulamalar; makine verimliliğiyle ilgileniyordu 1960’ların sonları: İnsan verimliliği önem kazandı; okunabilirlik, daha iyi kontrol yapıları(control structures) Yapısal programlama(structured programming) Yukarıdan aşağıya(top-down) tasarım ve adım adım şekillendirme/rötüş (step-wise refinement) 1970’lerin sonları: İşleme-dayalı(Process-oriented) dan veriye-dayalıya(data-oriented) geçiş Veri soyutlama(data abstraction) 1980’lerin ortaları: Nesneye-dayalı(Object-oriented) programlama Veri soyutlama + miras + polimorfizm (Data abstraction + inheritance + polymorphism)

1.5 Dil Kategorileri Zorunlu(Imperative) Fonksiyonel(Functional) Temel özellikleri değişkenler(variables), atama ifadeleri(assignment statements), ve iterasyondur(iteration) Örnekler: C, Pascal Fonksiyonel(Functional) Hesaplamaları yapmanın temel yolu, fonksiyonları verilen parametrelere uygulamaktır Örnekler: LISP, Scheme Mantıksal(Logic) Kural temelli(Rule-based) (kuralların sırası belirli değildir) Örnek: Prolog Nesneye-dayalı(Object-oriented) Veri soyutlama(Data abstraction), miras(inheritance), geç bağlama(late binding) Örnekler: Java, C++ İşaretleme(etiketleme)(Markup) Yeni; kendi başına programlama değildir, fakat Web dökümanlarında bilgiyi düzenlemek için kullanılır Örnekler: XHTML, XML

1.6 Dil Tasarımında Verilen Ödünler Okunabilirlik ve yürütme(execution) maliyeti Çelişen kriterler Örnek: Java demands all references to array elements be checked for proper indexing but that leads to increased execution costs Okunabilirlik ve yazılabilirlik Diğer çelişen kriterler Örnek : APL pek çok güçlü operatör (ve çok sayıda yeni sembol) sağlayarak karmaşık hesaplamaların kolayca yapılabilmesine imkan sağlarken okunabilirliği azaltmaktadır Yazılabilirlik (esneklik) vs. güvenilirlik Örnek : C++ pointerları çok güçlü ve esnek olmasına rağmen güveniliriliği azdır

1.7 İmplementasyon Metotları Derleme(Compilation) Programlar makine diline çevirilirlanguage Saf Yorumlama(Pure Interpretation) Programlar yorumlayıcı(interpreter) olarak bilinen başka bir program tarafından yorumlanır Hibrit(melez--Hybrid) İmplementasyon Sistemleri Derleyiciler(compilers) ve saf yorumcular(pure interpreters) arasındaki uzlaşmadır

Bilgisayarın katmanlı(layered) görünümü İşletim sistemi(operating system) ve dil implementasyonu, bilgisayarın Makine arayüzü (Machine interface) üzerindeki katmanıdır Copyright © 2006 Pearson Addison-Wesley. All rights reserved.

Derleme(Compilation) Yüksek-düzeyli(high-level) programı (kaynak dil--source language), makine koduna(machine code-- machine language) çevirir Yavaş çeviri, hızlı yürütme(execution) Derleme işlemi birkaç evreden oluşur: Sözcüksel analiz (lexical analysis): kaynak(source) programdaki karakterleri sözcüksel(lexical) birimlere çevirir Sentaks Analiz (sözdizim-syntax analysis): sözcüksel birimleri gramer/sözdizim ağaçlarına (parse trees) dönüştürür, bu ağaçlar programın sözdizimsel(syntactic) yapısını gösterir Semantik Analiz(anlamsal-Semantics analysis): ara (intermediate) kod üretilir Kod üretimi: makine kodu üretilir Copyright © 2006 Pearson Addison-Wesley. All rights reserved.

Derleme(Compilation) İşlemi Copyright © 2006 Pearson Addison-Wesley. All rights reserved.

Biraz daha derleme terminolojisi Yükleme Modülü(Load module) (yürütülebilir görüntü-executable image): kullanıcı ve sistem kodu birlikte Bağlama ve Yükleme(Linking and loading): sistem programını toparlama ve kullanıcı programa bağlama Copyright © 2006 Pearson Addison-Wesley. All rights reserved.

Makine kodunun yürütülmesi (Bulma-yürütme-çevrimi)Fetch-execute-cycle (bir von Neumann mimarisi üzerinde) initialize the program counter (program sayacını başlat) repeat forever fetch the instruction pointed by the counter (sayacın gösterdiği komutu bul) increment the counter (sayacı arttır) decode the instruction (komutu çöz) execute the instruction (komutu yürüt) end repeat

Von Neumann Darboğazı(Bottleneck) Bir bilgisayarın belleği ve işlemcisi arasındaki bağlantı hızı o bilgisayarın hızını belirler Program komutları(instructions) çoğu kez yukarıda bahsedilen bağlantı hızından çok daha hızlı yürütülebilir; bağlantı hızı bu yüzden bir darboğaza(bottleneck) sebep olur Von Neumann darboğazı(bottleneck) olarak bilinir; bilgisayarların hızını sınırlayan birinci faktördür

Saf Yorumlama(Pure Interpretation) Çeviri (translation) yoktur Programların implementasyonu daha kolaydır (çalışma-zamanı hataları(run-time errors) hemen ve kolayca gösterilir) Daha yavaş yürütme (Derlenmiş programlardan 10 ile 100 kat daha yavaştır) Çoğu kez daha fazla boş alana ihtiyaç duyar Yüksek-düzeyli(high-level) dillerde gittikçe daha nadir kullanılmaktadır Bazı Web yazı dillerde(Web scripting languages) kullanımı önem kazanır(örn., JavaScript)

Saf Yorumlama(Pure Interpretation) İşlemi

Hibrit İmplementasyon Sistemleri Derleyiciler(compilers) ve saf yorumlayıcılar(pure interpreters) arasında bir uzlaşmadır Bir yüksek-düzeyli dil programı kolayca yorumlanabilecek bir ara(intermediate) dile çevrilir Saf yorumlamadan daha hızlıdır Örnekler Perl programları, yorumlamadan önce hataları tespit etmek için kısmen derlenir Java’nın ilk implementasyonları hibritti; ara form, yani bayt kodu(byte code), bir bayt kodu yorumlayıcısı(byte code interpreter) ve bir çalışma-zamanı(run-time) sistemi olan herhangi bir makineye taşınabilirlik sağlar (birlikte, bunlara Java Sanal Makinesi (Java Virtual Machine) adı verilir)

Hibrit İmplementasyon İşlemi

Tam-zamanında(Just-in-Time) Implementasyon Sistemleri Önce programları bir ara(intermediate) dile çevirir Sonra ara dili makine koduna derler (machine code) Makine kodu sürümü(version) birbirini takip eden çağırmalar(subsequent calls) için tutulur JIT sistemleri Java programlarında çok kullanılır .NET dilleri bir JIT sistemiyle geliştirilmiştir

Önişlemciler(Preprocessors) Önişlemci makroları(macros (instructions-komutlar)) başka bir dosyadan dahil edilecek kodu belirtmek için yaygın olarak kullanılır Bir önişlemci, gömülü(embedded) önişlemci makrolarını genişletmek için programı derlenmesinden hemen önce işler İyi bilinen bir örnek: C önişlemcisi #include, #define, ve benzeri makroları genişletir

1.8 Programlama Platformları Yazılım geliştirmede kullanılan araçlar(tools) koleksiyonu UNIX Eski bir işletim sistemi ve araç koleksiyonu Günümüzde çoğunlukla UNIX üzerinde koşan bir GUI (örn., CDE, KDE, veya GNOME) aracılığıyla kullanılır Borland JBuilder Java için bir tümleşik geliştirme platformu(integrated development environment) Microsoft Visual Studio.NET Büyük, karmaşık bir görsel platform(visual environment) C#, Visual BASIC.NET, Jscript, J#, veya C++ ile programlama yapılır

Özet Programlama dillerini öğrenmenin öneminin bazı nedenleri: Farklı yapıları kullanabilme kapasitemizi arttırması Dilleri daha akıllıca seçebilir hale gelmek Yeni dilleri öğrenmeyi kolaylaştırması Dil değerlendirme kriterlerinin en önemlileri: Okunabilirlik(Readability), yazılabilirlik(writability), güvenilirlik(reliability), maliyet(cost) Dil tasarımı etkileyen ana faktörler makine mimarisi(machine architecture) ve yazılım geliştirme metodolojileridir Programlama dillerinin implementasyonunun ana metotları: derleme(compilation), saf yorumlama(pure interpretation), ve hibrit implementasyon