Programlama Dilleri
Sözdizimi ve anlam, bağlama ve kapsam, veri tipleri, alt programlar, fonksiyonel ve mantıksal programlama.
Kaynak kitap: Robert W. Sebesta, Concepts of Programming Languages, 8e, Pearson Education, Addison Wesley, 2008, ISBN 978-0-321-50968-0
- 1. haftaIntroduction
- Giriş: dil değerlendirme kriterleri ve dil tasarımına etkilerProgramlama dillerini neden incelediğimiz, uygulama alanları, readability/writability/reliability/cost kriterleri, orthogonality, tasarım ödünleşimleri, von Neumann mimarisinin etkisi ve dil kategorileri.
- Uygulama yöntemleri ve dillerin evrimiCompilation, pure interpretation ve hybrid uygulama; derleyicinin fazları, linker ve preprocessor, JIT; programlama ortamları ve Fortran'dan Java'ya dillerin evriminde sınavda sorulan kilometre taşları.
- 2. haftaDescribing Syntax and Semantics I
- Sözdizimi: BNF, türetme, parse tree ve belirsizlikBNF ve EBNF ile dil kuralı yazmak, leftmost derivation çıkarmak, parse tree çizmek, belirsizliği ispatlamak ve öncelik/birleşme yönünü gramerden okumak. Vizenin en çok puan getiren bölümü.
- 3. haftaDescribing Syntax and Semantics II
- Semantik: attribute grammar ve weakest preconditionStatic semantics için attribute grammar (synthesized, inherited, intrinsic), dinamik semantiğin üç yöntemi ve axiomatic semantics ile weakest precondition hesabı.
- Lexical ve syntax analysis: lexer, recursive descent, LL ve LRLexer'ın lexeme/token üretmesi, durum diyagramı, recursive-descent parser izleme, left recursion kaldırma, pairwise disjointness testi ve bottom-up (shift-reduce) fikri.
- 4. haftaNames, Bindings, Type Checking and Scopes
- İsimler, binding, lifetime ve scope (static vs dynamic)Değişkenin altı niteliği, binding time tablosu, dört storage kategorisi, scope ile lifetime farkı ve static/dynamic scope altında program çıktısı izleme.
- 5. haftaData Types
- Veri tipleri I: primitive, string, enum ve dizi adreslemePrimitive tipler, string tasarımı, enumeration, dizi kategorileri, row-major ve column-major adres formülleri ve associative array. Adres hesabı vizede garanti puan.
- Veri tipleri II: record, union, pointer ve tip eşdeğerliğiRecord ve tuple, free ve discriminated union, pointer/reference, dangling pointer ve memory leak, heap yönetimi, type checking, strong typing ve name/structure type equivalence.
- 6. haftaExpressions and Assignment Statements
- İfadeler ve atama: öncelik, yan etki, short-circuit, coercionOperatör önceliği ve birleşme yönü, operand değerlendirme sırası ve functional side effect, short-circuit evaluation, mixed-mode ifadeler ve tip dönüşümleri, atama biçimleri. Sınavdaki “What is printed?” sorularının kaynağı.
- 7. haftaControl Structures
- Kontrol yapıları: seçim, döngüler ve guarded commandsİki yönlü ve çok yönlü seçim (switch fall-through), counter-controlled ve logically-controlled döngüler, break/continue, iterator döngüleri, goto ve Dijkstra'nın guarded command'ları. Çıktı izleme soruları burada.
- 8. haftaSubprograms I
- Alt programlar I: parametre geçirme yöntemleriFormal/actual parametre, in/out/inout modelleri ve beş uygulama: pass-by-value, result, value-result, reference, name. Aynı programın her yöntemde ne bastığını izlemek; ayrıca Java'nın kuralı, closure ve default parametreler.
- 9. haftaSubprograms II
- Alt programlar II: activation record, static ve dynamic chainÇağrı ve dönüşte ne olur, activation record'un yapısı, run-time stack, özyineleme, iç içe alt programlarda static chain ile nonlocal erişim (chain_offset, local_offset), bloklar ve dynamic scope'un deep/shallow access uygulaması.
- 10. haftaAbstract Data Types
- Soyut veri tipleri (ADT) ve kapsüllemeSoyutlama kavramı, ADT'nin iki koşulu, information hiding, Ada paketleri, C++ ve Java sınıfları, parametreli ADT'ler (generics) ve büyük programlar için kapsülleme yapıları (namespace, package).
- 11. haftaObject-oriented Programming
- Nesne yönelimli programlama: kalıtım, dynamic binding ve vtableOOP'nin üç özelliği, kalıtım ve alt tipler, dynamic binding ile hangi metodun çalışacağını bulmak, override/overload/hiding farkı, çoklu kalıtım ve dynamic binding'in vtable ile uygulanması.
- 12. haftaException Handling and Event Handling
- Exception handling ve event handlingİstisna kavramı ve tasarım soruları, handler'a bağlama ve propagation, Java'da try/catch/finally akışı, checked/unchecked istisnalar, C++ ve Ada karşılaştırması; olay güdümlü programlama, listener modeli ve JavaScript olay döngüsü.
- 13. haftaFunctional Programming
- Fonksiyonel programlama: Scheme, lambda, map ve özyinelemeMatematiksel fonksiyon fikri, LISP veri yapıları (atom, liste, cons hücresi), Scheme'de car/cdr/cons, define ve lambda, if/cond/let, özyinelemeli liste fonksiyonları, yüksek mertebeden fonksiyonlar (map, filter, compose) ve tail recursion.
- 14. haftaLogic Programming
- Mantık programlama: Prolog, unification ve resolutionÖnerme mantığından Prolog'a: fact, rule ve query, unification ve instantiation, resolution ile derinlik öncelikli arama ve backtracking, listeler, aritmetik (is), cut ve closed-world assumption. Sorguların cevaplarını ve sırasını bulmak.