You are on page 1of 5

Subject: Advanced Programming

Code: 18767
Institution: Escuela Politécnica Superior
Degree: Computer Science and Engineering
Level: Graduate
Type: Elective
ECTS: 6

COURSE TITLE
ADVANCED PROGRAMMING (ADV-PROG)
1.1. Course number
18767

1.2. Course area


Software Engineering and Information Systems

1.3. Course type


Elective

1.4. Course level


Graduate

1.5. Year

1.6. Semester

1.7. Credit allotment


6

1.8. Prerequisites
ADV-PROG belongs to Subjects 1 y 4 (“Software Engineering”, 18 ECTS, “Information
Systems”, 24 ECTS) from the elective subjects of the Degree of Computer Science
and Engineering. No prerequisites are needed to attend this course, although it is
highly recommended that the student has intermediate knowledge about different
programming paradigms such as the ones used in the languages C, Java or Lisp.

1 de 5
Subject: Advanced Programming
Code: 18767
Institution: Escuela Politécnica Superior
Degree: Computer Science and Engineering
Level: Graduate
Type: Elective
ECTS: 6

1.9. Minimum attendance requirement

1.10. Faculty data


Add @uam.es to all email addresses below.

Theory:

Dr. Francisco Saiz López (Coordinator)


Departamento de Ingeniería Informática
Escuela Politécnica Superior
Office: B-323 Edificio B – 3ª Planta
Tel.: +34 91 497 2281
e-mail: francisco.saiz
Web: http://www.ii.uam.es/~saiz

Practice:

Dr. Francisco Saiz López (Coordinator)


Departamento de Ingeniería Informática
Escuela Politécnica Superior
Office: B-323 Edificio B – 3ª Planta
Tel.: +34 91 497 2281
e-mail: francisco.saiz
Web: http://www.ii.uam.es/~saiz

1.11. Course objectives

The subject is a widening to programming methods, functional programming being


mainly studied. The language of reference will be Haskell. Besides, there will be
several applications of these concepts in a recent platform, namely .NET, studying
the C# language and the F# language, which provide a hybrid approach to be added
to Haskell.

The common abilities to Computer Science that the student should acquire with this
course are:

• C6. Knowledge and application of basic algorithmic procedures in information


technologies to design solutions to problems, analysing the suitability and
complexity of the proposed algorithms.
• C7. Knowledge, and efficient design and utilisation of the most suitable data
types and structures for solving a problem.

2 de 5
Subject: Advanced Programming
Code: 18767
Institution: Escuela Politécnica Superior
Degree: Computer Science and Engineering
Level: Graduate
Type: Elective
ECTS: 6

• C8. Ability to analyse, design, construct and maintain applications robustly,


securely and efficiently, choosing the most adequate paradigm and languages
• IS3. Ability to provide solutions to integration problems according to
strategies, standards and available technologies
• IS1. Ability to develop, maintain and assess software systems that satisfy all
the user requirements and that behave reliably and efficiently, are accessible
to development and maintenance, and that comply with quality standards,
applying theories, principles, methods and practice in Software Engineering.
• CC4. Knowledge of the fundamentals, paradigms and techniques of intelligent
systems and ability to analyse, design and construct Computer Systems,
services and applications that use these techniques in any area of application

At the end of each unit, the student should be capable of:

UNIT BY UNIT SPECIFIC OBJECTIVES


TEMA 1.- Introduction to functional programming
1.1. Revise programming paradigms
1.2. Show advantages and drawbacks of those paradigms
TEMA 2.- Functional Programming in a pure language: Haskell
2.1. Introduce main types and their definitions
2.2. Include tuples and lists in the language
2.3. Study lists
2.4. Reason about programs
2.5. Study higher-order functions
2.6. Study polymorphism and type checking
2.7. Introduce lazy programming concepts
2.8. Study monads
TEMA 3.- Programming in C#
3.1. Present OOP basic concepts within the language
3.2. Compare the language to others like Java o C++
3.3. Introduce main components of C++
3.4. Present delegates, lambda expressions
3.5. Study generics as an important part of the language
3.6. Include lazy programming within iterator contexts
3.7. Study closures in relation to encapsulation concepts
3.8. Study currying concepts
3.9. Present caching techniques
3.10. Incorporate higher-order function concepts and monads
3.11. Present mapreduce pattern
TEMA 4.- Programming in F#
4.1. Present imperative programming use in this language
4.2. Incorporate programming with functions
4.3. Study pattern matching usage in the language
4.4. Study discriminated unions

3 de 5
Subject: Advanced Programming
Code: 18767
Institution: Escuela Politécnica Superior
Degree: Computer Science and Engineering
Level: Graduate
Type: Elective
ECTS: 6

4.5. Present records


4.6. Present lazy programming in the language
4.7. Study sequences
TEMA 5.- Advanced subjects
5.1. Study some representative examples of patterns in functional programming
5.2. Present .NET integration elements

1.12. Course contents

1. Introduction to functional programming


1.1. Programming paradigms
1.2. Advantages and drawbacks of use
2. Functional Programming in a pure language: Haskell
2.1. Basic types and definitions
2.2. Data types, tuples and lists
2.3. Programming with lists
2.4. Reasoning about programs
2.5. High order functions
2.6. Overloading, type classes and type checking
2.7. Lazy programming
2.8. Using monads
3. Programming in C#
3.1. Object-Oriented Programming
3.2. Comparison with C++ and Java
3.3. Introduction to the C++ programming language
3.4. Functions, delegates and lambda expressions
3.5. Flexible typing with generics
3.6. Lazy listings with iterators
3.7. Encapsulating data in closures
3.8. Currying and partial application
3.9. Caching techniques
3.10. Standard higher order functions and monads
3.11. The mapreduce pattern
4. Programming in F#
4.1. Imperative programming in F#
4.2. Programming with functions
4.3. Pattern matching
4.4. Discriminated unions
4.5. Records
4.6. Lazy evaluation
4.7. Sequences
5. Advanced aspects
5.1. Functional design patterns
5.2. Integration with .NET

4 de 5
Subject: Advanced Programming
Code: 18767
Institution: Escuela Politécnica Superior
Degree: Computer Science and Engineering
Level: Graduate
Type: Elective
ECTS: 6

1.13. Course bibliography

1. http://www.haskell.org (“books & tutorials”)


2. “Haskell the craft of functional programming”, Thompson, S. Ed. Addison
Wesley, 2011. INF/681.3.06/THO
3. “Programming in Haskell”, Hutton, G. Ed. Cambridge University Press, 2007.
INF/681.3.062-H/HUT
4. http://msdn.microsoft.com/en-us/vstudio (“master the languages”)
5. "Essential C# 4.0", Michaelis, M. Ed. Addison-Wesley, 2010. INF/681.3.062-
C/MIC
6. "Functional programming in C# classic programming techniques for modern
projects", Sturm, O. Ed. John Wiley, 2011. INF/681.3.062-C/STU
7. "Microsoft Visual C# 2010 step by step", Sharp, J. Ed. Microsoft, 2010.
INF/681.3.062-V/SHA
8. "Programming F#". Smith, C. Ed. O'Reilly, 2009. INF/681.3.062/SMI
9. "Patrones de diseño para C# Los 23 modelos de diseño: descripción y
soluciones ilustradas en UML2 y C#", Debrauwer, L. Ed. ENI, 2012.
INF/681.3.062-C/DEB

5 de 5

You might also like