Teachers
Person in charge
- Alicia Ageno Pulido ( ageno@cs.upc.edu )
- Sergio Álvarez Napagao ( salvarez@cs.upc.edu )
Others
- Alejandro Ivan Paz Ortiz ( ivan.paz@upc.edu )
- Anna Ramon Hinojosa ( anna.ramon.hinojosa@upc.edu )
- Carles Arnal Castello ( carles.arnal@upc.edu )
- Guillermo Godoy Balil ( guillem.godoy@upc.edu )
- Ignasi Gómez Sebastià ( ignasi.gomez@upc.edu )
- Jose Miguel Urquiza Ortiz ( jose.miguel.urquiza@upc.edu )
- Salvador Medina Herrera ( salvador.medina.herrera@upc.edu )
Weekly hours
Theory
2
Problems
0
Laboratory
2
Guided learning
0.28
Autonomous learning
5.72
Competences
Teamwork
- G5.2 - To plan the objectives, operation rules, responsibilities, agenda and review procedure of the work. To identify conflicts, negotiate and solve them in a effective way. To adapt oneself to different kinds of groups (big/small, technical/mixed, same space/at distance). To interact efficiently and promote the participation with other group members.
Entrepreneurship and innovation
- G1.2 - To have initiatives which generate opportunities, new objects or solutions, with a process and market implementation vision, and to imply other team members in projects which have to be developed (capacity to perform autonomously).
Common technical competencies
- CT2.3 - To design, develop, select and evaluate computer applications, systems and services and, at the same time, ensure its reliability, security and quality in function of ethical principles and the current legislation and normative.
- CT2.4 - To demonstrate knowledge and capacity to apply the needed tools for storage, processing and access to the information system, even if they are web-based systems.
- CT2.5 - To design and evaluate person-computer interfaces which guarantee the accessibility and usability of computer systems, services and applications.
- CT3.6 - To demonstrate knowledge about the ethical dimension of the company: in general, the social and corporative responsibility and, concretely, the civil and professional responsibilities of the informatics engineer.
- CT4.1 - To identify the most adequate algorithmic solutions to solve medium difficulty problems.
- CT4.2 - To reason about the correction and efficiency of an algorithmic solution.
- CT4.3 - To demonstrate knowledge and capacity to apply the fundamental principles and the basic techniques of the intelligent systems and its practical application.
- CT5.1 - To choose, combine and exploit different programming paradigms, at the moment of building software, taking into account criteria like ease of development, efficiency, portability and maintainability.
- CT5.2 - To know, design and use efficiently the most adequate data types and data structures to solve a problem.
- CT5.3 - To design, write, test, refine, document and maintain code in an high level programming language to solve programming problems applying algorithmic schemas and using data structures.
- CT5.4 - To design the programs¿ architecture using techniques of object orientation, modularization and specification and implementation of abstract data types.
- CT5.5 - To use the tools of a software development environment to create and develop applications.
- CT5.6 - To demonstrate knowledge and capacity to apply the fundamental principles and basic techniques of parallel, concurrent, distributed and real-time programming.
- CT6.1 - To demonstrate knowledge and capacity to manage and maintain computer systems, services and applications.
- CT8.6 - To demonstrate the comprehension of the importance of the negotiation, effective working habits, leadership and communication skills in all the software development environments.
- CT8.7 - To control project versions and configurations.
Objectives
-
Use previously acquired programming skills to develop a medium-sized programming project, select appropriate algorithms and data structures and build a program correctly and efficiently.
Related competences: CT4.1, CT4.2, CT5.2, -
Organize the design and implementation work of a medium-sized team (three to four people) according to a predetermined schedule. This organization includes both the overall planning and the allocation of tasks between group members.
Related competences: CT6.1, CT8.6, G5.2, CT8.7, -
Identify program specification, design and implementation components that can be factorised and immediately resolved and use object-orientation (OO) mechanisms for effective factorisation.
Related competences: CT5.4, CT5.5, CT5.1, CT2.3, -
Understand object-oriented design and programming principles and the advantages and disadvantages of adopting this programming paradigm.
Related competences: CT5.4, CT5.1, -
Use class and inheritance mechanisms to avoid redundancy and capture specification, design and implementation abstractions. They should also understand the advantages of this use of object orientation in terms of reliability, modifiability, portability, reusability and productivity.
Related competences: CT4.2, CT5.2, CT5.3, CT2.3, -
Deal effectively with anomalous program situations using, if necessary, the exception mechanism provided by the programming language. Test the program systematically and exhaustively.
Related competences: CT5.1, CT5.3, -
Design a reasonably usable and effective user interface for a program using a GUI library.
Related competences: CT2.5, CT5.6, -
Develop (in groups) a medium-sized programming project, according to a pre-defined development plan and architecture.
Related competences: G5.2, CT3.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.5, G1.2, CT2.4, CT4.3, CT5.3, CT2.3,
Contents
-
ISE review: Specification, class diagrams and use cases.
Life cycles. Project definition. Requirements. Functional specification. Initial domain modelling. UML class (domain) diagram. Use case diagram. Textual explanation. Case study. -
Introduction to Java and OO concepts in Java.
Object-oriented (OO) specification, design and programming. Classes, objects, attributes, methods and relationships. Encapsulation and hiding, abstraction and classification, inheritance. Polymorphism, static and dynamic binding. Other relationships: association, aggregation, dependency. -
Design and implementation in Java of the Three-tier architecture
The three-tier architecture design paradigm and its Java implementation -
Program testing
Verification. Program testing and debugging. Component testing. Testing and integration strategies. Drivers and stubs/mocks. Test planning. Scaffolding and regression tests. Testing help tools (JUnit). Handling errors and exceptions. -
Design patterns in Java
Some of the classical design patterns will be explained and implemented in Java (decorator, state, singleton, etc) -
Basic Concepts of Interface design in Java
How to design a simple graphical user interface using Java standard libraries and applying the principles of 3-layer arquitecture -
Software development toolchain
There will be an overview of the typical toolchain to develop software: version control (Git), testing integration (JUnit)
Activities
Activity Evaluation act
First delivery of the project
Implementation principles and design.Students will fully implement the domain model and the basic algorithmic kernel for the project and provide test suites for the implemented part.Objectives: 8 1 2 3 6 4 5
Week: 10
Theory
0h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
0h
Third delivery of the project
Final project delivery. The documentation should include the full implementation of the project and the test suites as appropriate, and the user manual. Each team will also give a presentation of their project.Objectives: 8 1 2 3 6 7 4 5
Week: 15 (Outside class hours)
Theory
0h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
0h
Third assignment presentation
Presentation of the third assignment and interview.Objectives: 8
Contents:
Theory
0h
Problems
0h
Laboratory
0h
Guided learning
2.2h
Autonomous learning
0h
Teaching methodology
Topics will be explained in a practical way through the use of numerous examples.The theory lessons will introduce the necessary knowledge, techniques and concepts for the course project.
Some of the laboratory classes (probably towards the beginning of the course) will be used to briefly present notations, languages, libraries and tools. In most laboratory classes, however, students take the initiative. A number of hours are available for project groups to work together and to discuss any doubts they have with the lecturer.
The two-hour theory classes and two-hour laboratory classes will take place once a week, except for the last two weeks (laboratory classes only). First week there are no laboratory classes (and there are two theory sessions).
The bulk of work on the subject will be on the project, which will have a strong algorithmic and data structure component.
The approach to implementing this project will be as follows:
- Students (15-20) from a laboratory group will form teams of four.
- Each laboratory group will be assigned a tutor.
- Within each team, a single student will be responsible for class programming and testing.
The programming language used will be Java.
Evaluation methodology
Final mark: Project_MarkProject mark: (0.40 * Delivery1 + 0.15 * Delivery2 + 0.45 * Delivery3) * FT
Given that the project is team work in which all team members (and only team members) must participate, the final project mark will be weighted according to a work factor (FT). This work factor is a score (0 <= FT <= 1) representing the work of each team member. The work factor will be determined on the basis of task distribution within the team (provided at the first and third deliveries) and the final presentation of the team. Work factors will be published together with the last project delivery marks.
Transversal competency in teamwork: Assessment will be based on a simple formula, available to the students, with the group tutor scoring competency aspects for each team member.
Transversal competency in entrepreneurship and innovation: Assessment is performed considering the initiative of the team in the two moments in which they have to make their own decisions, not predetermined in the subject: the extra functionalities of the project and the algorithms and data structures with which the main functionality is going to be solved. Therefore, the evaluation is a combination of two criteria:
1) Depending on the optional functionalities proposed versus the optional functionalities implemented
2) Depending on the initiative of the team when choosing algorithms and DSs to implement the main functionalities
Bibliography
Basic
-
An introduction to object-oriented programming
- Budd, T,
Addison-Wesley,
2002.
ISBN: 0201760312
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002402469706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Testing object-oriented systems: models, patterns and tools
- Binder, R.V,
Addison-Wesley,
2000.
ISBN: 9780321700674
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003748579706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The Java programming language
- Arnold, K.; Gosling, J.; Holmes, D,
Addison-Wesley,
2006.
ISBN: 0321349806
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003128819706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Enginyeria del software: programació orientada a objectes
- Peralta, A.J.; Rodríguez, H,
Edicions UPC,
1994.
ISBN: 8476533748
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991000965439706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
JUnit in action
- Tahcheiv, P. [et al.],
Manning,
2011.
ISBN: 9781935182023
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004104699706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The object-oriented thought process
- Weisfeld, M,
Addison-Wesley Professional,
2019.
ISBN: 9780135181966
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004210579706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Design patterns : elements of reusable object-oriented software
- Gamma, Erich,
Addison-Wesley,
cop. 1995.
ISBN: 0201633612
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991001193289706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Java design patterns: a hands-on experience with real-world examples
- Sarcar, V,
Apress L.P.,
2022.
ISBN: 9781484279717
Complementary
-
Object-oriented software construction
- Meyer, B,
Prentice Hall,
1997.
ISBN: 0136291554
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002431179706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The unified modeling language user guide
- Booch, G.; Rumbaugh, J.; Jacobson, I,
Addison-Wesley,
2005.
ISBN: 0321267974
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003448989706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The unified modeling language reference manual
- Rumbaugh, J.; Jacobson, I.; Booch, G,
Addison-Wesley,
2005.
ISBN: 0321245628
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002895869706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
UML and C++: a practical guide to object-oriented development
- Lee, R.C.; Tepfenhart, W.M,
Prentice Hall,
2001.
ISBN: 0130290408
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003632949706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Software engineering: a practitioner's approach
- Pressman, R.S.; Maxim, B.R,
McGraw Hill Higher Education,
2020.
ISBN: 9781260548006
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004193559706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
About face: the essentials of interaction design
- Cooper, A.; Reimann, R.; Cronin, D.; Noessel, C,
Wiley,
2014.
ISBN: 9781118766576
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004024899706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Pragmatic Programmer: your journey to mastery
- Thomas, David,
Addison Wesley,
2020.
ISBN: 9780135957059
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004949115106711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Clean architecture : a craftsman's guide to software structure and design
- Martin, Robert C,
Prentice Hall,
[2018].
ISBN: 9780134494166
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004184599706711&context=L&vid=34CSUC_UPC:VU1&lang=ca
Web links
- Pàgina de Java, el llenguatge de programació usat a l'assignatura. L'última versió disponible de la Java Platform es pot descarregar lliurement d'aquesta web. https://www.oracle.com/java/index.html
- Pàgina del consorci UML. https://www.uml.org/
Previous capacities
Students are expected to be able to:- Solve medium-difficulty algorithmic problems from clear specifications and implement their solutions in an imperative programming language.
- Understand basic program structuring mechanisms (modularisation, encapsulation, abstract data types, classes) and apply them to small and medium-sized tasks (a small number of modules).
- Understand object-oriented programming elements (classes, objects, execution mechanisms).
- Use an imperative object-oriented language.
- Use and program data structured in this language.
- Use libraries in this language.
- Master basic error location and correction strategies for simple modules.