Skip Navigation
York U: Redefine the PossibleHOME | Current Students | Faculty & Staff | Research | International
Search »FacultiesLibrariesCampus MapsYork U OrganizationDirectorySite Index
Future Students, Alumni & Visitors
EECS3311 - Software design - Winter 2020

Lectures and Scheduled Labs

  • Login with your Prism ID at the bottom ↓ of this page and ensure that you subscribe to the forum ←
  • Subscribe and regularly follow the Forum (see sidebar) for course updates.
  • Please ask all your Lab and Course questions on the Forum, or during the scheduled lab hours, and various office hours. Instructors will not be able to answer questions via email.
  • Lab0 (see github 3311-W20) starts the first day of term (Monday Jan 6th) and must be submitted by the end of the first week.
  • See Resources Tab for textbooks, and other information. You need not purchase any textbooks, as all the information is available via Steacie Library.

EECS3311 - Software design - Winter 2020

  • EECS3311-W20 Section M (Prof. Wang). Recordings, iPad Notes, and slides are available here.
  • M 13:00-14.30 90 DB 0016
  • W 13:00-14.30 90 DB 0016
  • LAB01 F 11:30-13.00 LAS 1006
  • LAB02 F 10:00-11.30 LAS 1006
  • EECS3311-W20 Section Z (Prof. Ostroff). Engineering. Slides are available from the SVN Tab (login required).
  • M 16:00-17.30 ACE 001
  • W 16:00-17.30 ACE 001
  • LAB 01 Thu. 13:00-14.30 LAS 1006
  • LAB 02 Thu. 14:30-16.00 LAS 1006

Note: Labs start on Thursday, 9 January, and on the very first day of class you are assigned Lab0 (submission required and essential). It is vital that you complete the specified work starting on the first day of term.

Laptops, tablets, smartphones

Laptops, tablets, smartphones, etc. (“devices”) usage in class is a two-edged sword. They can provide opportunities for learning but are also hugely distracting. For now, we encourage you to be disciplined in your usage of these devices. Put them away when they aren't needed. Stay focused on the class and you'll find that you learn more and better.

Information for Section M only

Getting Started

* Important: Subscribe to the forum for the latest announcements. Please ask all questions relating to the course material on the forum (not via email). For all other questions, see the course instructor during office hours.

  • See bottom of this page for login with your Prism password. Slides are available from the SVN repository (see link in the sidebar, once you have logged on).
  • Office hours: See Office Hours on the sidebar
  • Get started using the Eiffelstudio IDE on the first day of class (here). Compile and execute a hello world program. Then use the ESpec library to write and execute your first test. You might want to run through this introductory tutorial.


The work load in this course, as in many computer science and engineering courses, is high. The course has a scheduled weekly laboratory component to it which involves designing and coding (in Eiffel). You should be prepared to devote 12 hours a week on average to the course; this includes class time and labs. With proper planning and discipline, you can spread most of the work load fairly evenly throughout the course.

It is up to you to read and study relevant material without explicit instructions. You are expected to find the required readings in the references and any other sources you can find. Part of the university experience is to acquire a measure of self reliance. The instructor for the course can only guide you as to what is useful to learn; the effort must come from you. The course classes will not cover all the topics in detail. Instead, the classes will cover the most important points and give you pointers as to how the rest of the material can be studied.

Calendar Description

A study of design methods and their use in the correct implementation, maintenance and evolution of software systems. Topics include design, implementation, testing, documentation needs and standards, support tools. Students design and implement components of a software system. Weekly 1.5 hour laboratory (starting 2017). Prerequisites: General prerequisites; including SC/MATH 1090 3.00; LE/EECS 2031 3.00.

Learning Outcomes

Software designers are experts at developing software products that are correct, robust, efficient and maintainable. Correctness is the ability of software products to perform according to specification. Robustness is the ability of a software system to react appropriately to abnormal conditions. Software is maintainable if it is well-designed according to the principles of abstraction, modularity, and information hiding. At the end of the course, students will be able to:

1. Specification: Describe software specifications via Design by Contract, including the use of preconditions, postconditions, class invariants, loop variants and invariants

2. Construction: Implement specifications with designs that are correct, efficient and maintainable.

3. Testing: Develop systematic approaches to organizing, writing, testing and debugging software.

4. Analysis: Develop insight into the process of moving from an ambiguous problem statement to a well-designed solution.

5. Architecture: Design software using appropriate abstractions, modularity, information hiding, and design patterns.

6. Tools: Develop facility in the use of an IDE for editing, organizing, writing, debugging, testing and documenting code including the use of BON/UML diagrams for documenting designs. Also the ability to deploy the software in an executable form.

7. Documentation: Develop the ability to write precise and concise software documentation that also describes the design decisions and why they were made.


In design, the skill you wish to develop is the ability to distill a complex problem into its simplest components, and to organize the components into a cohesive and maintainable product. The following topics will help you to develop these skills and ovation the course learning outcomes.

1. Unit Tests, regression testing, using testing tools and debugging

2. Specifying modules with classical contracts: preconditions, postconditions and class invariants. Command-Query Separation Principle. Client-Supplier relarionships and modularity.

3. Iterator Pattern Design Pattern and quantification, Singleton Design Pattern

4. Classes as partially implemented abstract datatypes specified with contracts.

5. Static (compile time) type checking and dynamic binding semantics in object oriented design.

6. Inheritance, polymorphism and the Liskov substitution principle. Inheritance sub-contracting

7. Multi-panel Design Pattern (command and state pattern).

8. ETF (Eiffel Testing Framework) with singleton, command, publish-subscribe and MVC design patterns

9. Tuples and functional programming in design (lambda calculus and agents)

10. Strategy design pattern. Observer Design Pattern, comparison of design decisions with publish-subscribe and event-based programming

11. Decorator and Open-Closed Design Principle. Static Class Diagram and Dynamic Sequence Diagram.

12. Composite and Visitor Design Patterns. UML inheritance (generalization) and client-supplier (associations, aggregation and composition).

13. Using executable mathematical models (sets, functions, and relations) to develop a model of a complex system, and an abstraction function for checking that an implementation satisfies the high-level model.

14. Design by Contract, choosing the right abstractions and Information Hiding.

Last modified:
2020/01/08 12:30