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:

  • Tuesdays: 14:15-16:00 IL.408.
  • Even Wednesdays: 14:15-16:00 IL.408.

Exams

NumberExamReview of the exam
1 December 19, 2018, 10:00-12:00, IB.028. January 2, 2019, 16:00, IB.139.
2 January 9, 2019, 10:00-12:00, IB.028. January 14, 2019, 12:00, IB.139.
3 January 16, 2019, 10:00-12:00

On the Friday 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

  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. For each pattern: what problems does it solve, how does it solve the problems, how does it connect to other patterns?
  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?

Materials can be downloaded from here: materials

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 practices. They take about 10 minutes.

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

NumberDateTopic
1 September 26 OO design principles and heuristics
2 October 10 OO design heuristics, Refactoring
3 November 7 OO design heuristics, Refactoring, Package management and build tools
4 November 21 Clean-code, API design principles
5 December 5 Distributed OO, Concurrent and Distributed Patterns, Git

Schedule

Slides can only be downloaded after login.

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

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