template-browser-not-supported

Doble Grado en Ingeniería Informática del Software / Grado en Matemáticas

Back Back

Tecnología y Paradigmas de Programación

Código asignatura
2GIISMAT-3-009
Curso
Tercero
Temporalidad
Segundo Semestre
Carácter
Obligatoria
Créditos
6
Pertenece al itinerario Bilingüe
No
Guía docente

Programming languages used in software development have evolved defining different paradigms based on the abstractions offered to create computer programs. The knowledge of existing paradigms and the abstractions they offer is an important issue to be able to select the appropriate programming technology for solving a specific problem. This subject faces this challenge, studying the most widespread paradigms and their main features. The student should be able to choose the most appropriate one for the resolution of a specific problem.

This course is part of the Programming field in the Software Engineering degree. It is a mandatory course and mainly practical. Its main objective is making the student capable of solving real software problems in the main programming paradigms, choosing the appropriate features provided by each paradigm.

This subject is taught in the second semester of the second year. Its 6 ECTS credits imply 150 working hours, where 60 of them are classroom hours and 90 should be used as individual work. Each week, there are 2 hours of theory (up to 21 hours), a seminar hour (up to 7 hours) and 2 hours of laboratory classes (up to 28 hours). Besides, 2 hours will be used for group tutorials.

Regarding the competences to be acquired by the student, this course enhances the competences acquired in Introduction to Programming and Programming Methodology courses. Besides, it complements the Algorithmic, Data Structures and Operating Systems courses. The competences to be acquired in this subject are required in the Software Design, Software Architecture and Programming Language Design courses.

The prerequisites for this course are:

  • Knowledge of imperative procedure-based programming
  • Being skillful in de development of applications in an procedure-based imperative language, preferably in C
  • Knowledge of the object-oriented paradigm
  • Experience in the development of object-oriented software, preferably in Java
  • Little knowledge of concurrent programming

Considering the subjects of the Software Engineering degree, the student must have passed the following courses:

  • Computer Science Foundations
  • Introduction to Programming
  • Programming Methodology

The following are the competences to be acquired by the student when taking this course. These competences are taken from those in the Software Engineering degree. When the course does not cover the whole competence, it is pointed out the part of the competence covered.

Specific competences:

Com.8: Ability to analyze, design, build and maintain applications in a robust, secure, safe and efficient way, choosing the most appropriate paradigm and programming language.

Com.14: Knowledge and application of the basic principles and techniques of the parallel, concurrent, distributed and real time programming.
From this competence, the part to be acquired by the student when taking this course is:        
Knowledge and application of the basic principles and techniques of the parallel and concurrent programming.

Bas.5: Knowledge of the structure, organization, behavior and interconnection of computer systems, their programming basis, and their appliance to solve engineering problems.

Com.1: Ability to design and develop applications and computer systems, ensuring their reliability, safety, security and quality in accordance with ethic principles and the existing legislation and regulations.  
From this competence, the part to be acquired by the student when taking this course is:        
Ability to design and develop applications and computer systems, ensuring their reliability, safety, security and quality.

Com.16: Knowledge and appliance of the principles, methodologies and life cycles of software engineering. 
From this competence, the part to be acquired by the student when taking this course is:        
Knowledge of the principles of software engineering.

General competences:

CG-3: Ability for Abstraction

CG-4: Analysis and synthesis

CG-17: Positive attitude to future technologies and scenarios

CG-10: Oral and written communication in English.

Learning Outcomes

After taking this course, the student should be able to:

RA.P-2. Know the structure, organization and behavior of computer systems and intelligent systems, their programming basis, and their appliance to solve engineering problems. [Bas.5].

RA.P-3. Analyze, design, develop, select, evaluate and maintain software applications and computer systems, ensuring their reliability and quality, applying the theories, principles, methods and practices of software engineering. For this purpose, the student should be able to select the appropriate paradigm and programming language, considering their benefits and drawbacks. [Com.1] [Com.8] [Com16] [CG-3] [CG-4].

RA.P-4. Know and apply the appropriate algorithmic procedures, types and data structures to solve a problem, analyzing their suitability and complexity. [CG-3].

RA.P-5. Know and apply the main principles and techniques of parallel, concurrent, distributed and real time programming. [Com.14].

RA.P-6. Be able to solve integration problems, using existing strategies, standards and technologies. [CG-4].

RA.P-7. Document and show a software product towards text and diagrams, following the standards and regulations of software design and development. [CG-10].

RA.P-8. Know the new technologies in programming languages, analyze their trends, and develop a capacity to evaluate future technologies and paradigms. [CG-17].

RA.SFH-5. Realize the influence of software architecture in software programming, especially in parallel architectures. [Com.14].

RA.SI-4. Analyze the implications of multi-threading applications, including the access to shared resources, and utilize the basic communication and synchronization mechanisms to solve the derived problems of this concurrent shared-resource access. [Bas.4], [Com.14]

RA.IS-3. Apply different software development techniques of low-level design. [Com.8].

1. Programming Languages and Paradigms

Programming languages
Features of programming languages
Programming paradigms
Programming technology

2. The Object-Oriented Paradigm

Abstraction
Encapsulation
Modularity
Overload
Inheritance
Polymorphism
Abstract classes
Interfaces
Exceptions
Asserts
Design by contract
Generics (genericity)
Type inference

3. Foundations of Functional Programming

Lambda calculus
Curry-Howard isomorphism
Functions as first-class entities
Closures
Currying
Partial application
Continuations
Lazy evaluation
Referential transparency
Pattern Matching
Higher-order functions
List comprehensions

4. Foundations of Concurrent and Parallel Programming

Process and thread
Concurrency and parallelism
Algorithm parallelization
Asynchronous message passing
Explicit thread creation
Race condition
Context switching and thread pooling
Foreground and background threads
Thread synchronization
Deadlock
Thread-safe data structures
Parallelization with the Task Parallel Library
The function paradigm for algorithm parallelization

5. Dynamic Typing and Metaprogramming

Dynamic typing
Duck typing
Multiple dispatch
Computational reflection
Attributes or annotations
Dynamic code generation
Meta-programming

The following table shows how the competences are related to the course contents:

Topic

Specific Competences

General Competences

1

Com.8, Com.16, Bas.5

CG-10, CG-17

2

Com.8, Com.1, Com.16, Bas.5

CG-3, CG-4, CG-10, CG-17

3

Com.8, Com.14, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

4

Com.8, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

5

Com.8, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

These are the activities to be done by the student and the methodology (teaching methods) used:

  • Dialogued theory classes where different features of programming languages and paradigms are taught. The objective is to transmit the basic concepts to the students, so that they can later solve specific problems choosing the appropriate paradigm and technology (competences Com.8, Com.14, Bas.5, Com.16 and CG-17).
  • Activities to be autonomously done by the student prior attendance to laboratory classes. The objective is to strengthen the competences that the student should have acquired in previous courses (competences Com.8, Bas.5, Com.1, CG-3, CG-4 and CG-10).
  • The seminars and laboratory classes at aimed at solving real software problems, where the features of each paradigm to solve the presented problems are analyzed and used (competences Com.8, Com.14, Bas.5, Com.1, CG-3 a CG-4)
  • The student should analyze the resources provided by the lectures (e.g., source code, articles and Web pages) focused on applying specific techniques of different paradigms to solve software problems (competences Com.8, CG-3 and CG-4)
  • The student should be able to solve specific problems set out by the lecturers, applying the competences acquired in the course. To solve the problems, the student should be able to apply the specific features of different paradigms, using a particular programming language (competences Com.8, Com.14, Com.1, Bas.5, Com.16 and CG-4)
  • As part of the students’ autonomous work, they should read articles, texts, handouts and Web pages possible written in English (competences CG-4 and CG-10).

The following table details the topics and hours used in the previously mentioned activities:

IN CLASS ACTIVITIES

DISTANCE LEARNING ACTIVITIES

Topics

Total hours

Theoretical Classes

Classroom practice / seminars / workshops

Laboratory classes

Clinical practice in hospitals

Group tutorials

External Practical Classes

Assessment

Total

Work in group

Individual work

Total

Topic 1

2

2

2

Topic 2

52

6

2

8

16

36

36

Topic 3

42

5

3

10

1

2

18

24

24

Topic 4

46

6

2

10

1

1

22

24

24

Topic 5

8

2

2

6

6

Total

150

21

7

28

2

3

60

90

90

What follows is a summary of working hours related to the teaching method used:

Type

Hours

%

Total

In class

Theoretical classes

21

14%

60

Classroom practice / seminars / workshops

7

4,7%

Laboratory classes

28

18,7%

Clinical practice in hospitals

Group tutorials

2

1,3%

External Practical Classes

Assessment

2

1,3%

Distance learning

Work in group

90

Individual work

90

60%

Total

150

100%

Exceptionally, if the sanitary conditions require it, non-presential teaching activities could be included. In this case, students will be informed of the changes that need to be performed.

An evaluation of the conceptual and theoretical part of the course is done with a single short-answer test. It evaluates the students' knowledge of concepts and abstractions, and their grade of acquisition of competences Com.8, Com.14, Com.1, Bas.5, Com.16 y CG-3.

Due to the practical nature of the course, the practical evaluation is worth more than the theoretical one. For this purpose, the student will be evaluated using a computer. The evaluated competences are Com.8, Com.14, Com.1, Bas.5, CG-3, CG-4, CG-17 y CG-10. The tests are held in the laboratory classes. They consist in extending and/or modifying the work previously done by the student in prior laboratory classes (plus autonomous work).

The assessment is different, depending on the call:

Ordinary Call (May)

In this case, continuous evaluation is the only assessment method. The student must, at least, have attended 80% of the laboratory classes. The final evaluation has four different parts:

  • Theory test: A single theory test will be taken during the exams period. To pass the course, a minimum mark of 4 over 10 on this exam will be required.
  • Multiple-choice test: During the teaching period, after completing Theory Session 5, a multiple-choice question assessment will be conducted. This assessment will cover the theoretical content and seminar material covered up to that point.
  • Practical tests: Two tests will be taken during the teaching period. They consist of computer-based problem-solving tests. To pass the course, a minimum mark of 3 over 10 on every practical test will be required. Both tests have the same weight on the laboratories mark.
  • Mandatory Activities. Together with practical tests, students must deliver one mandatory activity. Those activities which were previously delivered in the Virtual Campus as weekly compulsory activities will get a Pass or Not-Pass grade. Every lecturer will select which activity must be delivered by the students. This would be a different activity for every lab group. The activity is delivered as individual work done by students (as stated in the evaluation regulations). To pass the subject, students must have a Pass grade in those mandatory activities delivered with practical tests.

Students must fulfil the abovementioned requirements to pass the subject. In that case, final evaluation is worked out weighting 30% theory test, 10% multiple-choice test and 60% practical tests. To pass the course, students must have an overall mark of 5 over 10. The evaluation will be Not Taken when the student does not take 50% of the course evaluation. If the student has not met the required attendance percentage, or if their grade on any activity has not reached the minimum required, then their final grade will be the minimum between their weighted final grade and 4 (Fail).

Extraordinary Calls (Advanced Call and Extraordinary Call)

The evaluation is a single theory test and a single practical test using a computer. The final grade is worked out weighting 40% theory (this includes multiple-choice questions) and 60% practical mark.

Distinguishing evaluation

For those students who were granted the right of a distinguishing evaluation, they should not fulfil the 80% attendance requisites. The rest of evaluation rules apply as described above.

Other considerations

Exceptionally, if the sanitary conditions require it, non-presential evaluation methods could be included. In this case, students will be informed of the changes that need to be performed.

Bibliography

  • Oliver Sturm. Functional Programming in C#: Classic Programming Techniques for Modern Projects. Wiley. 2011.
  • Tomas Petricek, Jon Skeet. Real World Functional Programming: With Examples in F# and C#. Manning Publications; 2009.
  • Joseph Albahari. Threading in C#. EBook available on http://www.albahari.com/threading  
  • Mark Michaelis. Essential C# 8.0 (7th Edition). Addison-Wesley Professional; 7th edition. 2020.
  • Andrew Troelsen. Pro C# 10 with .NET 6, Eleventh Edition. Apress. 2022.
  • Joseph Albahari. C# 10 in a Nutshell: The Definitive Reference. O’Reilly. 2022.
  • C# programming guide. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/. Visited on 2023-03-20.
  • C# documentation. https://learn.microsoft.com/en-us/dotnet/csharp/. Visited on 2023-03-20.

Software

  • Microsoft Visual Studio 2022