1/148
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
|---|
No study sessions yet.
Programlama dilleri kavramlarını öğrenmenin temel nedenleri nelerdir?
Fikirleri ifade etme yeteneğini artırmak, uygun dilleri seçebilme bilincini geliştirmek, yeni diller öğrenebilme yeteneğini geliştirmek, implementasyonun (gerçekleştirim) önemini daha iyi anlamak ve bilinen programlama dillerini daha iyi kullanmaktır.
Programlama dilleri, programcının "fikirleri ifade etme yeteneğini" nasıl sınırlar?
Düşüncelerimizin, onları ilettiğimiz dilin ifade gücü tarafından etkilendiğine inanılmaktadır. Programcılar, yazılım geliştirdikleri dilin kontrol yapıları, veri yapıları ve soyutlamaları gibi limitleriyle kısıtlanırlar. Değişik yapıdaki birçok programlama dili özelliğinin bilinmesi bu limitlerin azaltılmasını sağlar ve programcıların yazılım geliştirme ufuklarını artırır.
Bir dilde olmayan bir özellik gerektiğinde (simülasyon) nasıl bir yol izlenir?
Gerekli yapılar veya kavramlar, mecburi tutulan dilde simüle edilebilir (benzetim veya taklit). Örneğin, Pascal dilinde FORTRAN 90'daki 'INDEX' (substring arama) fonksiyonu yoktur, ancak programcı bu işlevi yapan bir altprogram yazarak çözüme ulaşabilir. Ancak, o özelliği simüle eden dil, direk barındıran dile göre daha hantal ve karmaşıktır.
Dil kavramlarını bilmek, yeni dilleri öğrenmeyi nasıl kolaylaştırır?
Programlama dillerinin genel kavramlarını iyi bilen bir programcı, yeni öğreneceği dilde bu kavramların nasıl birleştirildiğini ve kullanıldığını daha rahat anlar. Örneğin, "veri soyutlama" (data abstraction) kavramını bilen bir programcı, Java'da soyutlanmış veri tiplerinin nasıl oluşturulduğunu daha çabuk kavrayacaktır veya nesne tabanlı programlama kavramını bilen biri C++ veya Java'yı daha çabuk anlayacaktır.
İmplementasyon (Gerçekleştirim) detaylarını bilmek programcıya ne gibi avantajlar sağlar?
İmplementasyon detaylarını bilmek program bug (hatalarını) bulup düzeltmeye yardımcı olur. Ayrıca, bilgisayarın değişik dil yapılarını nasıl çalıştırdığını kafada canlandırmaya yardımcı olur ve aynı işi yapan farklı yapılar varsa hangisinin daha verimli olduğunu anlamayı sağlar.
Programlama dilleri seviyelerine göre nasıl sınıflandırılır?
Seviye, bir programlama dilinin insan algısına olan yakınlığıdır. Sınıflandırma şu şekildedir: 1. Makine Dili (1 ve 0'lar), 2. Düşük Seviyeli (Assembly), 3. Orta Seviye (C, C++), 4. Yüksek Seviye (Pascal, Fortran, Cobol), 5. Çok Yüksek Seviye (Java, SQL, C#).
Başlıca programlama alanları ve bu alanlardaki dil örnekleri nelerdir?
Bilimsel ve mühendislik (Fortran, C, Pascal), Mesleki uygulamalar (COBOL), Yapay zeka (LISP, Prolog, Python), Sistem programlama (C, Assembler) ve Web Yazılımı (HTML, Javascript, PHP, Java, C#).
Programlama dili değerlendirme kriterleri nelerdir?
Dört ana kriter vardır: Okunabilirlik (Readability), Yazılabilirlik (Writability), Güvenilirlik (Reliability) ve Maliyet (Cost).
Okunabilirlik (Readability) kriterini etkileyen temel faktörler nelerdir?
Dört temel faktör vardır: 1. Genel basitlik (Simplicity), 2. Ortogonalite (Orthogonality), 3. Veri tipleri (Data Types), 4. Sözdizimi tasarımı (Syntax Design).
Okunabilirlik bağlamında "Özellik Çokluğu" (Feature Multiplicity) nedir?
Aynı işlemi yapabilen birden fazla özelliğin dilde bulunmasıdır. Örneğin, Java'da bir değişkeni artırmak için count = count + 1, count += 1, count++ ve ++count gibi dört farklı yolun olmasıdır.
Okunabilirlik bağlamında "Ortogonalite" (Orthogonality) nedir?
Ortogonalite, "A'yı değiştirmek B'yi değiştirmez" anlamına gelen bir özelliktir. Programlama dilinde, nispeten küçük bir ilkel yapı kümesinin, dilin kontrol ve veri yapılarını oluşturmak için az sayıda yolla birleştirilebilmesi anlamına gelir.
Veri tipleri (Data Types) okunabilirliği nasıl etkiler?
Yeterli önceden tanımlanmış veri türlerinin olmaması okunabilirliği düşürür. Örneğin, C dilinde Boolean veri tipi yoktur, bu nedenle timeout = 0 gibi bir kullanım gerekir. Java gibi dillerde ise Boolean tipi bulunduğundan timeout = false kullanımı daha okunabilirdir.
Sözdizimi (Syntax) tasarımı okunabilirliği nasıl etkiler?
Sözdizimi tasarımı okunabilirlik için en önemli etkenlerden biridir. Örneğin, değişken isimlerinin kısa tutulması (örn. Fortran 77'de 6 karakter sınırı) okunabilirliği azaltır. Ayrıca for, end gibi özel kelimeler (keywords) değişken ismi olarak tanımlanırsa (örn. Fortran 95) okunabilirlik etkilenir.
C dilindeki 'static' kelimesi, okunabilirlik açısından neden bir sorundur?
Çünkü 'static' kelimesi, kullanıldığı bağlama göre farklı anlamlara gelir (anlam ve biçim problemi). Bir fonksiyon içinde kullanılırsa, değişkenin derleme zamanında (compile time) oluşturulacağını belirtir. Fonksiyonların dışında kullanılırsa, değişkenin sadece tanımlandığı dosyada görünür (erişilebilir) olacağını belirtir.
Yazılabilirlik (Writability) kriterini etkileyen faktörler nelerdir?
Üç temel faktör vardır: 1. Basitlik ve Ortogonalite (Az sayıda yapı ve kural), 2. Soyutlama Desteği (Support for Abstraction - ayrıntıların göz ardı edilmesi), 3. İfade (Expressivity - Operatör gücü ve önceden tanımlanmış işlevler).
Programlama dillerinde kaç tür soyutlama (abstraction) sınıfı vardır?
İki çeşit soyutlama sınıfı vardır: Proses (işlem) soyutlama ve Veri soyutlama. Proses soyutlamaya en iyi örnek altprogramlardır (örneğin bir sıralama fonksiyonu). Veri soyutlama ise (örneğin Java'da bir binary tree sınıfı oluşturmak) veriyi ve üzerindeki işlemleri kapsüller. Bu iki süreç, nesneye dayalı programlamada (OOP) "sınıf" yapısında birleşir.
Yazılabilirlik kriterlerinden "İfade" (Expressivity) ne demektir?
İşlemleri belirtmenin nispeten elverişli yollarının kullanılmasıdır; bu, yazılabilirliği artırır. Örneğin, modern dillerin for ifadesini içermesi veya C dilindeki count++ ifadesinin count = count + 1 ifadesinden daha açıklayıcı ve kısa olması.
Güvenilirlik (Reliability) kriteri için "Tip Kontrolü" (Type Checking) neden önemlidir?
Tip kontrolü, programın tip hatalarını test etmesidir. Güvenilirlik için önemlidir. Derleme zamanında (compile time) yapılan tip kontrolü, çalışma zamanı (run time) kontrolüne göre çok daha az maliyetlidir ve hataların erken fark edilip düzeltilmesini sağlayarak güvenilirliği artırır.
Güvenilirlik kriterlerinden "İstisna İşleme" (Exception Handling) nedir?
Programın yürütme zamanı (run-time) hatalarını yakalama ve bu hatalara karşı düzeltici önlemler alma yeteneğidir. Ada, C++, Java ve C# gibi diller bu özelliği içerir.
Güvenilirlik kriterlerinden "Takma Ad" (Aliasing) nedir?
Aynı bellek konumu (hafıza hücresi) için iki veya daha fazla farklı referans alma yönteminin veya ismin varlığıdır. Programlama dilleri için tehlikeli bir özellik olarak kabul edilir.
Bir programlama dilinin toplam "Maliyet" (Cost) kriterini neler oluşturur?
Programcıları eğitme maliyeti, program yazma maliyeti, programları derleme maliyeti, programları çalıştırma maliyeti, dil implementasyon sistemi (örn. ücretsiz derleyici olup olmaması), güvenilirlik (zayıf güvenilirlik yüksek maliyete yol açar) ve programların bakım maliyetidir.
Maliyetler içinde en yüksek orana sahip olan ve en önemli parametre nedir?
Programların bakım (maintaining) maliyeti. Tüm maliyet içinde en yüksek oranda olan maliyettir ve günümüzde bir yazılım projesinde maliyeti etkileyen en önemli parametre haline gelmiştir.
Diğer değerlendirme kriterlerinden "Taşınabilirlik" (Portability) nedir?
Programların bir uygulamadan veya bir implementasyondan diğerine taşınabilme kolaylığıdır. Bu, dilin standartlaşma derecesi ile alakalıdır.
Von Neumann mimarisinin temel özellikleri nelerdir?
Veriler ve programlar aynı bellekte (Memory) saklanır. Bellek CPU'dan ayrıdır. Komutlar (Instruction) ve veriler bellekten CPU'ya aktarılır.
Von Neumann mimarisi, programlama dillerini nasıl etkilemiştir?
Değişkenler (variables) bellekteki hücreler olarak düşünülür. Atama ifadeleri, bellekten CPU'ya ve geri aktarımı temel alır. İterasyon (Iteration), bu mimaride verimli bir kontrol yapısıdır.
Von Neumann mimarisindeki "Fetch-Execute-Cycle" (Getir-Yürüt Döngüsü) nasıl çalışır?
Program sayacı (Program Counter) başlatılır. Döngü içinde: Sayacın işaret ettiği komut bellekten getirilir (fetch), sayaç bir sonraki komut için artırılır (increment), komut çözülür (decode) ve komut çalıştırılır (execute).
Programlama metodolojileri zamanla nasıl bir evrim geçirmiştir?
1950'ler/60'lar başında odak makine verimliliğiydi. 1960'ların sonunda insan verimliliği önemli hale geldi, bu da yapısal programlama ve yukarıdan aşağıya (top-down) tasarım gibi metodolojilere yol açtı. 1970'lerin sonunda veri soyutlama (data abstraction), 1980'lerin ortasında ise nesne yönelimli programlama (Veri soyutlama + kalıtım + polimorfizm) öne çıktı.
Başlıca programlama dili kategorileri (paradigmaları) nelerdir?
Imperative (Emir Esaslı) Programlama (C, Java, C#), 2. Fonksiyonel (Functional) Programlama (LISP, Haskell, ML), 3. Mantık (Logic) Programlama (Prolog), 4. Biçimlendirme / programlama hibrit (JSTL, XSLT).
Imperative (Emir Esaslı) Programlama paradigması nedir?
Merkezi özellikleri değişkenler, atama ifadeleri ve iterasyon (döngü) olan programlama yaklaşımıdır. C, FORTRAN, Pascal, COBOL gibi birçok dil tarafından desteklenen, yaygın olarak kullanılan ilk dil grubudur.
Nesneye Yönelik Paradigma nedir?
Nesnelerin sınıflandırılması esasına dayanan ve birbirini etkileyen nesnelerden oluşan bir yaklaşımdır. Nesne; verileri, fonksiyonları ve prosedürleri tek bir yapıda tutar. İşlemler, nesnelerin gönderip aldığı mesajlarla gerçekleşir. Örnekler: Simula, Smalltalk, C++, Java ve C#.
Fonksiyonel (Functional) Paradigma nedir?
Bilgisayara bir işlemi nasıl yapacağının bildirildiği, temelini veriler ve sonucu elde etmek için veriye uygulanacak fonksiyonel dönüşümlerin oluşturduğu bir paradigmadır. Sadece fonksiyonlar üzerine kuruludur; fonksiyonlar başka fonksiyonları çağırır ya da başka fonksiyonların parametresi olur. İlk fonksiyonel dil Lisp'dir. Haskell saf fonksiyonel bir dildir; değişken ve atama işlemlerini desteklemez.
Mantık (Logic) Programlama paradigması nedir?
Programlamanın, bir işin nasıl yapılacağının değil, ne yapılması istendiğinin belirtilmesi olarak görüldüğü bir yaklaşımdır. Bu diller kural tabanlıdır ve belirli bir koşulun varlığını kontrol ederek çalışırlar. Imperative dillerin aksine, ayrıntılı algoritma tanımı ve komut sırası yoktur. En tanınmış örnek Prolog'dur.
Dil tasarımında "Güvenilirlik vs. Yürütme Maliyeti" (Reliability vs. Cost) arasındaki ödünleşme (trade-off) nedir?
Güvenilirliği artırmak genellikle yürütme maliyetini artırır. Örneğin, Java'nın dizi öğelerine yapılan tüm referansları indeksleme için kontrol etmesi (güvenilirlik), yürütme maliyetlerinin artmasına neden olur.
Dil tasarımında "Okunabilirlik vs. Yazılabilirlik" (Readability vs. Writability) arasındaki ödünleşme nedir?
Bazen yazılabilirliği artıran özellikler okunabilirliği düşürür. Örneğin, APL'nin güçlü operatörleri, karmaşık hesaplamaların kompakt (yazılabilirlik) ancak okunması zor (düşük okunabilirlik) programlar oluşturmasına olanak tanır.
Dil tasarımında "Yazılabilirlik (Esneklik) vs. Güvenilirlik" (Writability vs. Reliability) arasındaki ödünleşme nedir?
Esnekliği (yazılabilirliği) artıran özellikler güvenilirliği azaltabilir. Örneğin, C++ işaretçileri (pointers) güçlü ve çok esnektir (yazılabilirlik) ancak güvenilmezdir (reliability).
Programlama dilleri için temel uygulama metotları nelerdir?
Üç ana metot vardır: 1. Derleme (Compilation), 2. Yorumlama (Interpretation), 3. Hibrit Uygulama Sistemleri (Hybrid).
Derleme (Compilation) süreci nedir?
Üst düzey programı (kaynak dil) doğrudan makine koduna (makine dili) çevirme işlemidir. Çeviri yavaştır ancak uygulama (yürütme) hızlıdır. Temel aşamaları: Sözcük analizi (lexical analysis), Sözdizimi analizi (syntax analysis), Anlambilim analizi (semantics analysis) ve Kod üretimidir (code generation).
Yorumlama (Interpretation) süreci nedir?
Kaynak kodun, yorumlayıcı (interpreter) olarak bilinen başka bir program tarafından yorumlanmasıdır. Yürütme hızı derlenmiş programlardan 10 ila 100 kat daha yavaştır ve genellikle daha fazla alan gerektirir.
Hibrit Uygulama Sistemleri nedir?
Derleyiciler ve yorumlayıcılar arasında bir uzlaşmadır. Üst düzey dil programı, kolay yorumlanabilen bir ara dile (intermediate language) çevrilir. Yorumlamadan daha hızlıdır. Java'nın ilk uygulamaları (ara kod/bayt kodu ve JVM) bu yaklaşıma örnektir.
Von Neumann Darboğazı (Bottleneck) nedir?
Bir bilgisayarın belleği ile işlemcisi arasındaki bağlantı hızı, bilgisayarın toplam hızını belirlemesidir. Program komutları genellikle bu bağlantı hızından (veri aktarım hızı) daha hızlı yürütülebilir, bu da bağlantının bir darboğaz olmasına yol açar. Bu durum bilgisayarların hızındaki birincil sınırlayıcı faktördür.
JIT (Just-in-Time) Uygulama Sistemleri nasıl çalışır?
Başlangıçta programları bir ara dile çevirirler. Daha sonra, alt programların ara dilini, o alt program çağrıldığında makine koduna derler. Bu makine kodu sürümü sonraki çağrılar için saklanır. .NET dilleri ve modern Java programları JIT sistemleri ile uygulanır. Özünde gecikmeli derleyicilerdir.
Ön işlemciler (Preprocessors) nedir ve ne işe yarar?
Bir önişlemci, program derlenmeden hemen önce programı işleyerek gömülü makroları (komutları) genişleten bir araçtır. Bu makrolar genellikle başka bir dosyadaki kodun ekleneceğini belirtmek için kullanılır. C ön işlemcisindeki #include ve #define buna örnektir.
IDE (Tümleşik Geliştirme Ortamı) nedir?
Programcıların hızlı ve rahat yazılım geliştirmesini amaçlayan, geliştirme sürecini organize edebilen birçok aracı içinde barındıran bir yazılım türüdür. Genellikle sözdizimi renklendirmesi yapabilen bir kod editörü, tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı ve otomasyon için "inşa araçları" (build tools) içer