MSc:OOPandSoftwareArchitechture

From IU
Jump to navigation Jump to search

OOP and Software Architecture

  • Course name: OOP and Software Architecture
  • Course number: XYZ

Course Characteristics

Key concepts of the class

  • Principles of OOP and their implementation in modern languages
  • Principles and foundations of software architecture
  • Architecture patterns and their use
  • Approaches to design high quality software meeting requirements
  • Architectural issues and their impact on software design
  • Formal notations and specifications with related tools

What is the purpose of this course?

Software developers often follow architectural and design patterns informally without deep understanding of the subject. This prevents the delivered software to work optimally and often to meet functional and nonfunctional requirements. The course provides a detailed understanding of software architectures and how they should be used by software developers and in the software engineering process.

Course objectives based on Bloom’s taxonomy

- What should a student remember at the end of the course?

By the end of the course, the students should be able to ...

  • How to use principles of software architecture and to design and develop code following these principles
  • Understand architecture patterns and apply them in practical software design
  • How to design high quality software meeting requirements
  • Understand formal notations and related tools and use them in practical design

- What should a student be able to understand at the end of the course?

By the end of the course, the students should be able to ...

  • How to create high quality software using mainstream concepts of programming
  • What is object-oriented programming and its main advantages
  • How to increase the level of abstraction with help of genericity
  • How to create concurrent programs and what are the main issues related to this kind of programming

- What should a student be able to apply at the end of the course?

By the end of the course, the students should be able to ...

  • to be able to design and develop high quality programs in any OO programming language

Course evaluation

Course grade breakdown
Proposed points
Labs/seminar classes 40 40
Interim performance assessment 30 30
Exams 30 30

Labs/seminar classes:

  • In-class participation 1 point for each individual contribution in a class but not more than 1 point a week (i.e. 14 points in total for 14 study weeks),
  • overall course contribution (to accumulate extra-class activities valuable to the course progress, e.g. a short presentation, book review, very active in-class participation, etc.) up to 6 points.

Interim performance assessment:

  • in-class tests up to 10 points for each test (i.e. up to 40 points in total for 2 theory and 2 practice tests),
  • computational practicum assignment up to 10 points for each task (i.e. up to 30 points for 3 tasks).

Exams:

  • mid-term exam up to 30 points,
  • final examination up to 30 points.

Overall score:

100 points (100%).

Grades range

Course grading range
Proposed range
A. Excellent 90-100
B. Good 75-89
C. Satisfactory 60-74
D. Poor 0-59

If necessary, please indicate freely your course’s grading features.

Resources and reference material

  • Textbook: Design It! From Programmer to Software Architect by Michael Keeling
  • Textbook: Mary Shaw and David Garlan. Software Architecture - Perspectives on an emerging discipline. Prentice Hall, 1996
  • Textbook: Len Bass, Paul Clements, and Rick Kazman. Software Architecture in Practice. Addison-Wesley Professional, 3rd edition, 2012.

Course Sections

The main sections of the course and approximate hour distribution between them is as follows:

Course Sections
Section Section Title Teaching Hours
1 Introduction to object-oriented principles and OO programming 1 12
2 Introduction to graphical specification of software system architecture 2 8
3 Introduction to design patterns 3 8

Section 1

Section title:

Introduction to object-oriented principles and programming OO programming

Topics covered in this section:

  • The history and predecessors of object orientation
  • The notion of type
  • Basic OO principles: encapsulation, inheritance, polymorphism
  • The notion of class. Objects as class instances. OO support in modern languages

What forms of evaluation were used to test students’ performance in this section?

|a|c| & Yes/No
Development of individual parts of software product code & 0
Homework and group projects & 1
Midterm evaluation & 1
Testing (written or computer based) & 1
Reports & 0
Essays & 0
Oral polls & 1
Discussions & 1


Typical questions for ongoing performance evaluation within this section

  1. What is type?
  2. Is class a type and why?
  3. Inheritance vs delegation: what’s the difference?
  4. Single & multiple inheritance: advantages and disadvantages.

Typical questions for seminar classes (labs) within this section

  1. How could you explain the mechanism of virtual functions in Java/C#/C++?
  2. What is abstract type? What’s the difference between abstract type and interface?
  3. How to explain the notions of static and dynamic types?

Test questions for final assessment in this section

  1. What do “upcasting” and “downcasting” mean?
  2. How to define and create interfaces?
  3. What are the benefits of type inference?

Section 2

Section title:

Introduction to graphical specification of software system architecture

Topics covered in this section:

  • Key principles of software architecture
  • UML graphical notation and its use
  • Introduction to UML diagrams

What forms of evaluation were used to test students’ performance in this section?

|a|c| & Yes/No
Development of individual parts of software product code & 0
Homework and group projects & 1
Midterm evaluation & 1
Testing (written or computer based) & 0
Reports & 0
Essays & 0
Oral polls & 1
Discussions & 1


Typical questions for ongoing performance evaluation within this section

  1. What is UML notation?
  2. Name a few basic kinds of UML diagrams?
  3. How to automate program generation out of UML specifications?

Typical questions for seminar classes (labs) within this section

  1. Draw UML diagrams for a few simple class compositions.
  2. Perform hand-written “engineering”: for the given UML diagrams build the equivalent class composition.

Test questions for final assessment in this section

  1. Give short characteristics for five basic kinds of UML diagrams
  2. Explain the notions “engineering” and “reverse engineering”.

Section 3

Section title:

Introduction to design patterns

Topics covered in this section:

  • Basic principles of design patterns
  • Pattern taxonomy
  • Introduction to widely used design patterns

What forms of evaluation were used to test students’ performance in this section?

|a|c| & Yes/No
Development of individual parts of software product code & 0
Homework and group projects & 1
Midterm evaluation & 1
Testing (written or computer based) & 0
Reports & 0
Essays & 0
Oral polls & 1
Discussions & 1


Typical questions for ongoing performance evaluation within this section

  1. Which OO principles are used in patterns?
  2. What’s the difference between inheritance and delegation? Why the latter is preferable in many cases?

Typical questions for seminar classes (labs) within this section

  1. Choose your two favorite patterns and compare them.
  2. Explain the meaning of the RAII idiom.
  3. Provide an example of using pattern Façade.

Test questions for final assessment in this section

  1. Choose four patterns that are most important by your opinion, and explain their importance for software design.
  2. Explain the difference between behavioral, creational and structural patterns.
  3. Compare Iterator and visitor patterns.