NCSU brick logo

CSC/ECE 517: Object-Oriented Design and Development

Fall 2024

course schedule: lectures

Toggle Sections

Lecture Schedule

Week 1[ 08/18 - 08/24 ]

[Fri 08/23] Lecture 1: Course overview; use cases, refactoring, version control
In-class exercises

Your account on github.com  Submit  
Reminder emails survey  Submit  
Use-case quiz  Submit  See
Refactoring example  Submit  
Git commands  Submit  
Steps in version control  Submit  
Non-conflicting and conflicting changes  Submit  

Week 2[ 08/25 - 08/31 ]

[Thu 08/29] Lecture 2: (online) Introduction to Ruby
  • Lecture notes, etc.
Online videos

Intro to Ruby for Java programmers [13:43]  Video  Examples  
Everything is an object, every operation is a method call [8:28]  Video  Examples  
Ruby OOP [4:32]  Video  Examples  
All programming is metaprogramming [7:05]  Video  Examples  
Blocks, iterators, functional idioms [8:45]  Video  Examples  

[Fri 08/30] Lecture 3: Modules & mixins, reflection
In-class exercises

Web-based Ruby console  Submit  
Inheritance and modules  Submit  See
Comparable: Battle of Minions  Submit  See
Factorial using inject  Submit  See
Yield  Submit  See
Reflection methods  Submit  See
Collection operators  Submit  See
Deck and Player  Submit  

Week 3[ 09/01 - 09/07 ]

[Thu 09/05] Lecture 4: (online) Mixins, yield, intro to Rails
  • Lecture notes, etc.
Online videos

Mixins and duck typing [7:43]  Video  Examples  
Yield in Ruby [8:20]  Video  Examples  
Hello Rails: from zero to CRUD [10:49]  Video  Examples  
Active-record basics [8:55]  Video  Examples  
Database and migrations [9:45]  Video  Examples  
Models: Finding, Updating, Deleting [11:26]  Video  

[Fri 09/06] Lecture 5: Rails and the Cookbook app
In-class exercises

Cookbook installation instructions  See
Assign me to a team for Program 2?  Submit  
Arrange statements in the index method of recipe.rb  Submit  See
What happens when a category that has a recipe is deleted?  Submit  See
Questions on menu at the bottom of all screens  Submit  See
Confirming an action  Submit  See
Review questions  Submit  See
Routes  Submit  See
Adding validations  Submit  See
Relationship between recipes and categories  Submit  See
Fixing the deletion glitch  Submit  See
Steps in showing a recipe  Submit  See
Questions about new.html.erb  Submit  See
Program 2 requirements inspection  Submit  See

Week 4[ 09/08 - 09/14 ]

[Thu 09/12] Lecture 6: (online) Rails controllers, routing, and debugging
  • Lecture notes, etc.
Online videos

Routes, controllers and views [22:39]  Video  
Forms [6:00]  Video  Examples  
Redirection, the flash, and the session [9:24]  Video  Examples  
Finishing CRUD [6:11]  Video  Examples  
Associations and foreign keys [13:43]  Video  

[Fri 09/13] Lecture 7: Practice Developing a Rails App
In-class exercises

AmazeZone app: instructions and submission  Submit  See

Week 5[ 09/15 - 09/21 ]

[Thu 09/19] Lecture 8: (online) Testing & design patterns
Online videos

Overview of testing [3:23]  Video  
FIRST, TDD and introduction to RSpec [10:53]  Video  
Anatomy of a test case - Arrange, Act, Assert [11:15]  Video  
Fixtures and factories [10:31]  Video  
Introduction to design patterns and singleton pattern [19:43]  Video  

[Fri 09/20] Test 1

Week 6[ 09/22 - 09/28 ]

[Thu 09/26] Lecture 9: (online) Design patterns
  • Lecture notes, etc.
Online videos

Adapter Pattern [7:29]  Video  
Observer Pattern [22:26]  Video  Examples  
Builder pattern [13:04]  Video  Examples  
Agile Methodology [13:20]  Video  
Scrum [7:06]  Video  
Introduction to Agile Scrum [8:52]  Video  

[Fri 09/27] Lecture 10: Testing in Rails/Agile exercise
In-class exercises

Reflection on Test 1  Submit  
Assign me to a team for the first OSS project  Submit  
What kinds of tests are these?  Submit  See
Fixtures: what is automatically generated?  Submit  See
Databases in Rails projects  Submit  See
Scenarios for unit tests  Submit  See
What else could you test about recipes?  Submit  See
Functional tests  Submit  See
Unit, functional, and integration tests  Submit  See
Team for White Elephant Sizing  Submit  See

Week 7[ 09/29 - 10/05 ]

[Thu 10/03] Lecture 11: (online) Behavior-driven design, Cucumber & Capybara
  • Lecture notes, etc.
Online videos

Behavior-Driven Design and User Stories [6:59]  Video  
SMART user stories [12:10]  Video  
Lo-Fi UI sketches and storyboards [5:35]  Video  
Points and Velocity [6:34]  Video  
From Stories to Acceptance Tests: Introducing Cucumber [9:50]  Video  
Introducing Capybara [6:56]  Video  Examples  
Basic Cucumber & Capybara demo [18:14]  Video  
More advanced Cucumber & Capybara demo [13:28]  Video  

[Fri 10/04] Lecture 12: O-o intro & CRC-card design
In-class exercises

Evaluate your Program 2 mentor  Submit  
Tagging exercise  Submit  
Nouns that represent classes  Submit  See
Nouns that do not represent classes  Submit  See
Responsibilities/collaborators of Customer  Submit  See
CRC cards for Flight Reservation system  Submit  See
Another responsibility of Invitation  Submit  See
What to do when accepting an Invitation  Submit  See
What else to do when accepting an Invitation  Submit  See
Responsibilities of ProjectTopic  Submit  See

Week 8[ 10/06 - 10/12 ]

[Thu 10/10] Lecture 13: (online) Legacy code & refactoring
  • Lecture notes, etc.
Online videos

9.1: What Makes Code "Legacy" and How Can Agile Help? [8:14]  Video  
9.2: Approaching a Legacy Codebase [7:38]  Video  
9.3: Establishing Ground Truth With Characterization Tests [5:27]  Video  
9.4: Comments & Commits - Tell Me a Story [8:24]  Video  
9.5: Beyond Correctness - Smells, Metrics, and SOFA [15:10]  Video  
9.6: Part 1 - Intro to Method Level Refactoring [14:44]  Video  
9.6: Part 2 - Reflections on Refactoring [4:37]  Video  

[Fri 10/11] Lecture 14: SOLID principles
In-class exercises

Single Responsibility: separating classes  Submit  See
Single Responsibility principle (Ruby)  Submit  See
Single Responsibility principle (Java)  Submit  See
Open/Closed principle (Ruby)  Submit  See
Open/Closed principle (Java)  Submit  See
Liskov Substitution principle (Ruby)  Submit  See
Liskov Substitution principle (Java)  Submit  See
Interface Segregation principle (Ruby)  Submit  See
Interface Segregation principle (Java)  Submit  See
Dependency Inversion principle (Java only)  Submit  See
SOLID Principles review  Submit  See

Week 9[ 10/13 - 10/19 ]

[Thu 10/17] Lecture 15: (online) Writing meaningful tests
  • Lecture notes, etc.
Online videos

Using SimpleCov to check C0 Coverage [3:26]  Video  
The Magic Tricks of Testing [32:22]  Video  
Where to Test Functionality [9:23]  Video  
Design patterns video tutorial: Basic OOP Concepts [15:02]  Video  

[Fri 10/18] Lecture 16: O-o fundamentals
In-class exercises

Interest in independent study/thesis topics  Submit  
Example of a bad name  Submit  See
Subtype polymorphism example  Submit  See
Which method is called -- Take 1  Submit  See
Which method is called -- Take 2  Submit  See
Which method is called -- Take 3  Submit  See
Singleton exercise  Submit  See
Adapter exercise  Submit  See
Design-pattern identification  Submit  See

Week 10[ 10/20 - 10/26 ]

[Thu 10/24] Lecture 17: (online) Patterns: Decorator, Proxy, Façade; Elegance & inheritance
  • Lecture notes, etc.
Online videos

Decorator pattern [12:57]  Video  Examples  
Proxy Pattern [8:12]  Video  Examples  
Façade pattern [11:31]  Video  
Elegance and Inheritance (with slide view) [16:35]  Video  
Elegance and Inheritance (with captions) [16:35]  Video  

[Fri 10/25] Test 2

Week 11[ 10/27 - 11/02 ]

[Thu 10/31] Lecture 18: (online) Patterns: Chain of Responsibility, Prototype, Flyweight
  • Lecture notes, etc.
Online videos

Chain of Responsibility pattern [8:42]  Video  
Prototype pattern [7:58]  Video  Examples  
Flyweight pattern [13:17]  Video  Examples  

Week 12[ 11/03 - 11/09 ]

[Thu 11/07] Lecture 19: (online) Patterns: Composite, Iterator, Visitor
  • Lecture notes, etc.
Online videos

Composite pattern [16:46]  Video  Examples  
Iterator pattern [19:57]  Video  Examples  
Visitor pattern [13:30]  Video  Examples  

[Fri 11/08] Lecture 20: Elegance and classes, Factory Method, Abstract Factory
In-class exercises

compareTo vs. Comparator  Submit  See
Keeping track of a traversal  Submit  See
High and low coupling  Submit  See
Uses of class variables and methods  Submit  See
Law of Demeter exercise  Submit  See
Factory Method exercise (streaming)  Submit  See
Factory Method exercise (postcodes)  Submit  See
Abstract Factory furniture example  Submit  See
Abstract Factory exercise (frameworks)  Submit  See
Abstract Factory exercise (postcodes)  Submit  See
Design-pattern identification  Submit  See

Week 13[ 11/10 - 11/16 ]

[Thu 11/14] Lecture 21: (online) Patterns: Mediator, Bridge, Memento
  • Lecture notes, etc.
Online videos

Mediator pattern [18:30]  Video  Examples  
Bridge pattern [14:51]  Video  Examples  
Memento pattern [20:29]  Video  Examples  

[Fri 11/15] Lecture 22: Patterns: Delegation, State, Strategy, Visitor
In-class exercises

Why create your own Stack class?  Submit  See
Delegation: fill in the blanks  Submit  See
A State interface  Submit  See
How should States be defined?  Submit  See
Methods for State pattern for floating-point FSM  Submit  See
Strategy pattern: fill in the blanks  Submit  See
Double-dispatch arithmetic  Submit  See
Visitor pattern: Fill in the blanks  Submit  See
Design-pattern identification  Submit  See

Week 14[ 11/17 - 11/23 ]

[Thu 11/21] Lecture 23: (online) Patterns: Command, Interpreter, Template Method
  • Lecture notes, etc.
Online videos

Command pattern [23:40]  Video  Examples  
Interpreter pattern [22:22]  Video  Examples  
Template Method pattern [14:04]  Video  Examples  

[Fri 11/22] Lecture 24: Review
In-class exercises

Sign up for a demo time  Submit  
Permission to use software developed in this course  Submit  
Design-pattern identification  Submit  

Week 15[ 12/01 - 12/07 ]

[Fri 12/06] Final Exam, 3:30-6:00 PM, EB III 2201 & 2207
©2007-2009 NC State University | Disclaimer
back to top