Object-oriented software design

Tárgykód:
Course coordinator:
Goldschmidt Balázs
Degree program:
IT engineering
Study cycle:
BSc
Semester in curriculum:
5
Category:
Specialization
Description:

A magyar kurzus információi a tárgy magyar weboldalán találhatók.

Lecturer: Dr. Simon Balázs

Subject info: BMEVIIIAC00

Location and time:

  • Thursdays: 14:15-16:00 IL.408.
  • Even Thursdays: 16:15-18:00 IL.408.

Exams

NumberExamReview of the exam
1 January 6, 2020, 10:00-12:00, IB.028. January 10, 2020, 8:00, IB.139.
2 January 13, 2020, 10:00-12:00, IB.028. January 17, 2020, 14:00, IB.139.
3 January 20, 2020, 10:00-12:00, IB.028. January 21, 2020, 13:00, IL.414.

On the Thursday of the week of the exam marks will be uploaded to the Neptun system, and the points will be uploaded to the jporta system. You have to present a valid ID card with photo at the review of the exam.

A sample exam can be downloaded here: sample exam

Thesis exam questions

Materials can be downloaded from here: materials

  1. OO design principles. For each principle: what problems does it solve, how does it solve the problems, what happens if we violate it, when can we violate it?
  2. OO design heuristics. For each heuristic: what problems does it solve, how does it solve the problems, what happens if we violate it, when can we violate it? How do these heuristics connect to refactoring patterns and code-smells?
  3. What is refactoring? Rules, steps, advantages and problems of refactoring. Refactoring patterns and code-smells. How do they connect to the OO design heuristics?
  4. Clean-code principles. For each principle: what problems does it solve, how does it solve the problems, what happens if we violate it, when can we violate it?
  5. API design principles. For each principle: what problems does it solve, how does it solve the problems, what happens if we violate it, when can we violate it?
  6. Distributed OO. What kind of problems can arise? What are the possible solutions to these problems?
  7. Concurrent and distributed patterns. What are the problems? What are the possible solutions? How the patterns are connected to each other?
  8. Immutable OO. What are the disadvantages of mutability? What are the advantages and disadvantages of immutability? How can an immutable class be implemented?
  9. Package management and build tools (Ant+Ivy, Maven, Gradle, Bazel, Buck). What do they do? How they work? What are their advantages and disadvantages?
  10. Git version control system. Git concepts. How does Git work? What are the Git commands? What do these commands do?

Small tests

There will be 5 small tests during the semester. In order to get a signature from the subject, the best three of the small tests must be successfully passed, i.e. they should achieve at least 2.0 points. The small tests cannot be repeated.

The small tests are required only for the signature, the final mark is independent of them.

The small tests are written at the beginning of the lectures on even Thursdays. They take about 10 minutes.

The results of the small tests can be seen in the JPorta system.

NumberDateTopic
1 October 3 OO design principles
2 October 17 OO design principles, OO design heuristics, Package management and build tools
3 October 31 OO design heuristics, Refactoring
4 November 14 Clean-code
5 November 28 API design principles, Distributed OO, Concurrent and distributed patterns

Schedule

Slides can only be downloaded after login.

WeekDateKindTopicSlidesExtra material
Week 1 September 12 Holiday Sports day
Week 2 September 19 Lecture OO design principles Intro
Slides
Cheat sheet
Design patterns
Practice OO design principles Slides
Week 3 September 26 Lecture OO design heuristics (classes, responsibilities) Slides Cheat sheet
Week 4 October 3 Lecture OO design heuristics (associations, inheritance) Slides Cheat sheet
Practice Package management and build tools (ANT, Maven, Gradle, ...) Slides
Week 5 October 10 Lecture OO design heuristics (inheritance, sequence diagrams) Slides Cheat sheet
Week 6 October 17 Lecture Refactoring Slides Cheat sheet
Practice Refactoring Slides
Week 7 October 24 Lecture Clean-code Slides
Week 8 October 31 Lecture Clean-code Slides
Practice Git Slides
Week 9 November 7 Lecture Distributed OO, SOAP, REST Slides
Week 10 November 14 Lecture API design principles Slides Cheat sheet
Practice Analysis task: API Flaws Slides
Week 11 November 21 Lecture Concurrent and Distributed Patterns Slides
Week 12 November 28 Lecture Concurrent and Distributed Patterns Slides
Practice Analysis task: Common concurrency issues Slides
Week 13 December 5 Lecture Concurrent and Distributed Patterns Slides
Week 14 December 12 Lecture Immutable objects Slides
Practice Practice for the exam

References

  • Robert C. Martin: Principles of Object-Oriented Design, http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  • Arthur J. Riel: Object-Oriented Design Heuristics, Addison Wesley, 1996, ISBN-10: 0321774965, ISBN-13: 978-0321774965
  • Robert C. Martin: Clean Code, A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008, ISBN-10: 0132350882, ISBN-13: 978-0132350884
  • Jasmin Blanchette: The Little Manual of API Design, Trolltech, a Nokia company, 2008
  • Matt Gemmell: API Design, http://mattgemmell.com/api-design/
  • Martin Fowler: Refactoring: Improving the Design of Existing Code, 1999, Addison Wesley, ISBN-10: 0201485672, ISBN-13: 978-0201485677
  • Douglas Schmidt: Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects, 2000, Wiley, ISBN: 0-471-60695-2