| Day | Chapters & Strategies | Topics | 
		         
		          	| 1 | Course Introduction Format and schedule
 | 
		          			Course contents - what to expect from the courseCourse format - lectures and workshops, timingScope | 
		
		         
		          	| 1 | C Fundamentals Fundamental features of the C language that are necessary to learn C++
 | 
		          			File structure, main() function, compilationsBlocks and scopeControl flow, conditions, loopsArrays and pointersStructuresFunctions, parameters, return values, standard librariesExercises | 
		
		         
		          	| 1 | Object-Oriented Features Fundamental OO features, embodied in C++ classes
 | 
		          			Basic OO concepts, exampleClasses: definition, attributes, methodsCustomer class: definition/declaration, implementationFile organization: header files, implementation filesMinimum class functions: declaration, implementation | 
		        
		         
		          	| 1 | Objects Two different types of C++ objects and safe waysof handling them
 | 
		          			Definition, UML syntax, comparison with classesCreating C++ objects: automatic, dynamicAutomatic objects: syntax, proper style, common mistakesDynamic objects: syntax, features, common mistakesManaging object pointers to keep them safe. 
		            	 | 
		        
		         
		          	| 1 | What we've seen so far... Reviewing the C++ / OO world
 | 
		          			OO conceptsC++ KeywordsC++ featuresC++ class versus the UML analysis modelC++ class versus the UML design model 
		            	 | 
		
		         
		          	| 1 | C++ Application Code Building a basic C++ application
 | 
		          			The required main() functionThe main() function fileApplication files | 
		
		         
		          	| 1 | Lab One Building the Customer C++ application
 | 
				          	The Customer application in C++Project, directories and filesRunning the application | 
		
		         
		          	| 1 | Constructors A fundamental OO feature
 | 
				          	Constructor role, syntaxExample: header file, implementation fileConstructor with default parameter valuesConstructor header, implementation and usageWhat we just learned | 
		
		         
		          	| 1 | Encapsulating into an object How a String class can be designed to greatly simplify the Customer class, according to OO strategies
 | 
		          			We can accomplish more Impact of a String object to the Customer classThe String class: features, design, attributes, methods | 
		
		         
		          	| 1 | Lab Two Appreciating the power of encapsulation and specialization
 | 
		          			String class implementationUsing the String class in the Customer classCode review and discussion | 
		
		         
		          	| 2 | Destructors The art of describing complex object interactions
 | 
		          			Role, syntax, usageCode examples with the Customer and Credit classesHeader and implementation files for destructors | 
		
		         
		          	| 2 | Lab Three Implementing the String destructor
 | 
				          	Dynamic de-allocationArray de-allocation Run, test, debug | 
		
		         
		          	| 2 | Associations How objects stay in touch with each other
 | 
				          	Self-reference, the this pointerCredit and Customer class associations codemain(): how the association is usedAssociation UML syntax and examplesReflexive associations for diagraphs, linked lists, hierarchies.Association roles | 
		
		         
		          	| 2 | Lab Four Making objects interact with each other in C++
 | 
		          			Applications made of interacting objectsSimple linked list exampleList and Link class membersPutting Customer objects in the listWrite, test, debug and extra credits | 
		
		         
		          	| 2 | Inner Classes The proper syntax for private objects and true encapsulation
 | 
		          			PrinciplesInline SyntaxHeader / implementation syntaxCode example | 
			
		         
		          	| 2 | Lab Five Inner classes at work
 | 
				            Link as an inner class of ListCredit as an inner class of CustomerCode, test, debugCode reviewSolution discussion | 
		       
		         
		          	| 3 | What we've learned... Summarizing the key OO features and techniques, implemented in C++
 | 
		          			Encapsulating string matters in a String classC++ application architectureAllocation / de-allocation of objectsEncapsulation / specializationConstructors / DestructorsAssociationsthis self referenceObject design fundamental strategiesInner classes | 
		
		         
		          	| 3 | C++ References A nicer and safer syntax to handle objects
 | 
		          			Concept and formal syntaxExample with the Person classMethods returning a reference to selfExampleBrief exercise | 
		
		         
		          	| 3 | Initialization Starting with a value
 | 
		          			Object initializationDeclaration, implementation, usageMember initializationExample with the String and Person classesInitializing primitive type membersFormal syntax | 
		
		         
		          	| 3 | Lab Six Initializing many objects and members
 | 
				          	Initializing String members in Customer and Credit classesInitializing List using either references or pointersWrite, run, test, debugSolution walkthrough | 
		
		         
		          	| 3 | C++ Operators A simple and powerful syntax to handle a natural need
 | 
		          			A natural needAlternate syntax for methodsExamples and formal syntaxComplete case: the Complex classInternal and external operators | 
		
		         
		          	| 3 | Lab Seven Creating your own operators
 | 
				       	  	String class assignment and append operatorsWrite, run, test, debugSolution walkthrough | 
		
		         
		          	| 4 | Static Class members as opposed to object members
 | 
				          	Beyond objects: class membersExamples, allocation, initializationBrief exercise | 
		
		         
		          	| 4 | Composition / Aggregation Objects containing or owning other objects
 | 
				          	Definition and UML syntaxThe real composition conceptMultiple partsAggregation versus compositionInner class notationClass type notationExamples in C++Brief exercise | 
		
		         
		          	| 4 | Constant members (const) A simple syntax to enforce proper OO design strategies
 | 
				          	Const membersConst parametersConst variablesConst methodsExamplesBrief exercise | 
		
		         
		          	| 4 | Inheritance Modeling type hierarchies
 | 
				          	Definition and UML syntaxInstantiation limitationsInheritance versus the Is A relationshipInherited object examplesMultiple sub-classes and multiple inheritance | 
		
		         
		          	| 4 | Inheritance C++ syntax Coding inheritance in C++
 | 
				          	Derivation model and code: simple inheritanceMultiple inheritanceInitialization according to constructor needs Initialization according to inheritance typeExample with Contract / Development / MaintenanceVirtual methods | 
		
		         
		          	| 4 | Lab Eight Coding a C++ project involving inheritance, associations, aggregation
 | 
				          	The Retail problem domain modelAssociations, compositionsInheritance and virtual methodsshow() and getPrice() methods Write, test, debug and solution code walkthrough | 
		        
		        
		        
		        	 We'll consult with you and pick one or two chapters from the following list of optional topics. More details about these topics are given below.   
		        
		        
				
					| Day | Chapters & Strategies | Topics | 
		         
		          	| 5 | Interfaces (optional) Generalizing a group of methods that form a functional concept
 | 
				          	The concept of interface and UML notationPure virtual classes and inheritance for interfacesC++ examplesBrief exercise | 
		
				 
		          	| 5 | Exception Handling (optional) Encapsulating and processing exceptions outside the main business logic.
 | 
							Inner class exception type and valuetry, throw and catchCall stack handlingThrowing objects for better exception handlingBuilding self-contained exception classesBuilding exception class hierarchiesExceptions with templatesExceptions and constructorsException interface specificationExamplesExercise | 
		
		         
		          	| 5 | Object Design (optional) Fundamental principles and basic patterns
 | 
				          	Specialization, self-sufficiency, interfaceDelegation, propagationA common object design patternApplication to the Deal modelMultiple and cascading object interactions in C++Object sequence and collaboration diagramsExamplesBrief exercise | 
		
		         
		          	| 5 | C++ implementation of associations and association classes (optional) Design and coding of the most common relationships
 | 
				          	Implementation algorithmSingle or multiple linksSingle or bi-directional traversals References or lists of referencesAssociation classes implementationExamplesBrief exercise | 
		
		         
		          	| 5 | Templates (optional) Beyond classes and models: templates and meta models
 | 
				          	Concept, flexibility and powerExamples, formal syntaxHeader and implementation parts (both in header file)Complex class complete exampleBrief exercise on the Complex class | 
		
		         
		          	| 5 | Lab Nine (optional) Implementing a whole template
 | 
				          	Concept of a parametized List<T>Implementing the Link<T> templateImplementing the List<T> templateAdditional methods Write, test, debug and solution code walkthrough |