| 
                
             | 
            
                 
                
    | COM2014 | Programming Languages | 3+0+0 | ECTS:4 |  | Year / Semester | Spring Semester |  | Level of Course | First Cycle |  | Status	 | Compulsory |  | Department | DEPARTMENT of COMPUTER ENGINEERING |  | Prerequisites and co-requisites | None |  | Mode of Delivery | Face to face, Practical |  | Contact Hours | 14 weeks - 3 hours of lectures per week |  | Lecturer | Doç. Dr. Hüseyin PEHLİVAN |  | Co-Lecturer | ASSIST. PROF. DR. Hüseyin PEHLİVAN, |  | Language of instruction |  |  | Professional practise ( internship )	 | None |  |   |   | The aim of the course: |  | The course aims to present the basic principles of modern programming languages through source code written in a variety of languages such as C, Java and Haskell, examining the execution models of major programming paradigms (imperative, object-oriented, functional and logical) , the language structures at different layers (lexical, syntactic, contextual and semantic) and other important programming language issues (types, polymorphism, overloading, scopes, activation records and parameter passing) . |  
 |  Learning Outcomes | CTPO | TOA |  | Upon successful completion of the course, the students will be able to : |   |    |  | LO - 1 :  | use the formal techniques to define programming language syntax and semantics. | 1.2 - 1.3 - 2.1 | 1,3 |  | LO - 2 :  | quickly begin to write programs in new languages given basic outlines of syntax and semantics. | 1.2 - 1.3 - 2.1 | 1,3 |  | LO - 3 :  | analyse and evaluate new programming languages. | 1.2 - 1.3 - 2.1 | 1 |  | LO - 4 :  | apply the functional programming style and write Haskell programs requiring multiple functions. | 1.2 - 1.3 - 2.1 | 1,3 |  | LO - 5 :  | distinguish the differences between statically and dynamically typed languages. | 1.2 - 1.3 - 2.1 | 1 |  | LO - 6 :  | apply the imperative and object-oriented features such as polymorphism, typing, overloading, early versus late binding. | 1.2 - 1.3 - 2.1 | 1,3 |  | CTPO : Contribution to programme outcomes, TOA :Type of assessment (1: written exam, 2: Oral exam,  3: Homework assignment, 4: Laboratory exercise/exam, 5: Seminar / presentation,  6: Term paper), LO : Learning Outcome   |  |   |    
			 | Language paradigms: Imperative, object-oriented, functional and logic programming. Program syntax: Backus Naur form, grammars, lexical and phrase structures, other grammar forms. Syntax and semantics: Operators, precedence, associativity, other ambiguities, parse trees. Language systems: Classical sequence, interpreters, virtual machines, delayed linking, profiling, dynamic compilation, binding times. A first look at Haskell: Hugs system, types, classes. Types: Primitive and constructed types, enumerations, arrays, unions, subtypes, uses for types. A second look at Haskell: Defining functions, list comprehensions. Polymorphism: Overloading, parameter coercion, parametric and subtype polymorphism. A third look at Haskell: High-order functions, functional parsers. Scope: Definitions, scoping with blocks, scoping with labeled namespace, scoping with primitive namespace, dynamic scoping. A fourth look at Haskell: Interactive programs, declaring types and classes. Memory locations for variables: activation-specific variables, activation records, static allocation, dynamic stacks, handling nested functions, functions as parameters, long-lived functions. Memory management: A memory model, stacks, heaps, fragmentation, current heap links. Object-orientation: Classes, prototypes, inheritance, encapsulation, polymorphism. Parameters: Correspondence, parameter-passing methods. Cost models: a cost model for lists, a cost model for function calls, a cost model for arrays. |  
			 |   |   
 | Course Syllabus |  |  Week | Subject | Related Notes / Files |  |  Week 1 | Language paradigms
Determination of multidisciplinary project teams and subjects |  |  |  Week 2 | Program syntax |  |  |  Week 3 | Syntax and Semantics |  |  |  Week 4 | Language Systems |  |  |  Week 5 | A First Look at Haskell |  |  |  Week 6 | Types |  |  |  Week 7 | A Second Look at Haskell |  |  |  Week 8 | Polymorphism and Scope |  |  |  Week 9 | Mid-term exam |  |  |  Week 10 | A Third Look at Haskell |  |  |  Week 11 | Memory Locations for Variables |  |  |  Week 12 | A Fourth Look at Haskell |  |  |  Week 13 | Memory management and Object-orientation |  |  |  Week 14 | Parameters
Proje sunumları |  |  |  Week 15 | Cost Models |  |  |  Week 16 | End-of-term exam |  |  |   |   
 | 1 | Webber, A. B., 2011, Modern Programming Languages: A Practical Introduction, Franklin Beedle & Associates, 572 p.
 |  |  |   |   
 | 1 | Sebesta, R. W., 2019, Concepts of Programming Languages, Pearson, 784 p. |  |  | 2 | Hutton, G., 2016, Programming in Haskell, 2nd ed., Cambridge University Press, 272 p. |  |  |   |   
 |  Method of Assessment  |  | Type of assessment | Week No | Date | Duration (hours) | Weight (%) |  |  Mid-term exam |  9 |  17/04/2024 |  2 |  50 |  |  End-of-term exam |  16 |  10/06/204 |  2 |  50 |  |   |   
 |  Student Work Load and its Distribution  |  | Type of work | Duration (hours pw) | No of weeks / Number of activity | Hours in total per term |  |  Yüz yüze eğitim |  3 |  14 |  42 |  |  Sınıf dışı çalışma |  3 |  14 |  42 |  |  Arasınav için hazırlık |  10 |  1 |  10 |  |  Arasınav  |  2 |  1 |  2 |  |  Uygulama |  1 |  14 |  14 |  |  Dönem sonu sınavı için hazırlık |  15 |  1 |  15 |  |  Dönem sonu sınavı |  2 |  1 |  2 |  | Total work load |  |  | 127 |  
  
                 
             |