|
Lecturer(s)
|
-
Diviš Roman, Ing. Ph.D.
-
Bažant Michael, doc. Ing. Ph.D.
|
|
Course content
|
Programme of lectures and exercises: 1. Clean code - recommendations for writing of clean code, using comments, choosing good identifiers 2. Design patterns - fundamental design patterns by Gang of Four (creational, structural, behavioral) 3. Refactoring of source code - methods of refactoring, using IDE 4. Testing - recommendations for unit and integration tests, using mock/stub/fake/spy/dummy objects 5. Test Driven Development - cycle - test, code, refactoring 6. Git - distributed versioning system, principles, commands push, pull, commit, checkout, branch, merge, rebase, team cooperation, pull/merge request 7. Git, Continuous Integration/Continuous Delivery, Git Hooks - CI/CD techniques , using of Git hooks, services GitHub/GitLab/BitBucket and Travis/Circle CI/Jenkins 8. Coding kata - practical exercise of pair/group programming 9. Dependency Injection, Inversion of Control - methods (constructor, setter, method injection), DI/IoC containers 10. Garbage collector - reference couting, Mark&Sweep, Mark&Sweep&Compact, generational GC 11. Parallelism, concurrency, asynchronous - usage of threads, thread pools, async/await and other techniques for asynchronous programming 12. Generic programming - templates (C++), generics (Java - type erasure, C# - reification), features and consequences of different implementations of generics 13. Functional programming - elements of functional programming in OO languages, LINQ (C#), Stream (Java), lambda expressions, function closure, immutable objects, pure functions Exercises are focused on the application of theoretical knowledge from the lectures in a given week of teaching.
|
|
Learning activities and teaching methods
|
Monologic (reading, lecture, briefing), Dialogic (discussion, interview, brainstorming), Skills training
- Preparation for an exam
- 24 hours per semester
- Writing a seminar paper
- 9 hours per semester
- Contact teaching
- 52 hours per semester
- Home preparation for classes
- 65 hours per semester
|
|
Learning outcomes
|
The main goal of the subject is to familiarize students with advanced programming techniques in object oriented programming languages.
Passing this course enables to write and maintain clean code, use design patterns and other advanced programming techniques, use TDD and methods for team cooperation using versioning system Git.
|
|
Prerequisites
|
There is expected fundamental knowledge of algoritmisation, data structures, and knowledge of object oriented programming in higher programming languages (C++, C#, Java).
|
|
Assessment methods and criteria
|
Oral examination, Written examination, Home assignment evaluation
In order to get credit, the student will create a set of at least 3 patches for the assigned projects, which must improve the quality and functionality of the source code (applying clean code, unit tests, programming language conventions). The patch must pass code review approval. The specific requirements for the number of patches, project assignments and source code repositories are specified in the study materials. Examination: the student has to perform a code review on the given example(s), after writing the comments there is an oral-consultation part where the individual code comments will be further consulted by the examiner. In the case of the distance form of the exam, an oral examination will be conducted including theoretical questions, practical (programming) tasks and/or practical application of the code review. In order to pass the exam, a minimum of 60% of the expected deficiencies in the code must be identified (grade E). In the case of distance learning, the course will take place in the MS Teams environment during standard timetabled hours.
|
|
Recommended literature
|
-
Kent Beck. Test-Driven Development: By Example. 2003. ISBN 978-0321146533.
-
Robert C. Martin. Clean architecture: a craftsman's guide to software structure and design.. London: England, 2017. ISBN 9780134494326.
-
Steve McConnell. Code Complete: A Practical Handbook of Software Construction. Redmond: Washington, 2004. ISBN 978-0735619678.
|