Henrik Høltzer (heho)
Software Construction - SWC 1.2 2C

Semester: 2.sem., forår 2022
Email: heho@zealand.dk

Materialer generelt:

Noter:

Object-Oriented Programming with C# (findes på GitHub her)
Razor pages: PART 1: Razor Pages
Razor pages: PART 2: Razor Pages


Opgaver:

C# Programming Exercises (findes på GitHub her)

Unsolved exercise projects

Solved exercise projects


Supplerende materiale:

Microsoft Visual C# Step by Step (8th ed.), by John Sharp (ISBN: 9781509301041)

NB: Bogen er IKKE pensum

 

Video

LinkedIn Learning (Lynda.com) (Gratis adgang; tilmeld med din skole e-mail konto: https://www.linkedin.com/learning/activate) (SWC Lynda.com Playlist)

MS Academy: C# Fundamentals for absolute beginners

 

 

Link til 1. semester: Software Construction - SWC 1.1 1C

Uge Emner Materialer Opgaver
5-6 Jeg gennemgår prøve-opgaverne og laver lidt "opsamling"

Brush Up

Code Of Conduct.pdf (ved online undervisning)

Razor Pages Arkitektur illustrationer:

RazorArchitecture.docx
RazorArchitecture(Req-Res).docx
RazorArchitecture(Service).docx
RazorArchitecture(Handler part1).docx
RazorArchitecture(Handler part2).docx

Prøveopgaver:
VagtplanSystem.pdf
VineCoolerSystem.pdf

Eksempel:
ItemRazorV3.zip (vist i klassen)
ScrumViewer.zip

Exercise:
UserStoriesPart1.pdf
UserStoriesPart2.pdf
UserStoriesPart3.pdf

Solutions:
UserStoriesPart1.zip
UserStoriesPart2.zip
UserStoriesPart3.zip

7 Brush Up (cont.),
Inheritance
Polymorphism
Interface


Inheritance (Arv), Interface + Abstract class:
Noter: s.111-122

(Bog: Kap. 12, 13, 6 (i den orden))

Slides: Inheritance and Polymofism


Morgen opgave (mandag)
Diskuter i grupperne følgende:
Hvad er en Class, en Abstract Class og et Interface?
Hvad er forskellen?
Hvornår benyttes de?
Hvordan implementeres de?
Hvordan illustreres de i et UML - klassediagram
 
Hvad er Arv?
Hvordan implementeres den?
Hvordan illustreres den i et UML klassediagram?
 
Kan man implementere flere interfaces samtidigt?
Kan man nedarve fra flere klasser samtidigt (multipel nedarvning)?
Kan man både implementere (implement) et interface og arve (extends) fra en klasse samtidigt?

Eksempel:
TypeOfTest.zip (kode vist i klassen)


Morgen opgave
(onsdag)
Diskuter i grupperne følgende:
Hvad er protected (sammenlign med private og public)
Hvornår benyttes det? - giv et eksempel.
Hvad er virtual og override?
Hvornår benyttes de?
Hvad er polymorfi? - giv et eksempel.
Hvad er et type-cast? og hvornår benyttes det? - giv et eksempel.
Hvis man prøver at type-caste en reference til en forkert type, kastes en "InvalidCastException"
Hvordan kan man teste om en reference peger på et objekt af en bestemt type? - vis eksempler

Exercise:
ScrumViewerArv.pdf )
BrushUp

ISpeak (Philosopher)

OOP.2.7


Solutions:
ISpeak.zip

8.1
21/02
Error/Exception
Unit Test

Exceptions:
Noter: s.129-133 (MSVC#: Chap. 6 )
Exceptions and Exception Handling in C#

MSDN: Best Practices for Exceptions

C# Note s. 262-276 (Unit Test)
Unit Testing (Power point)

LinkedIn.com/learning

Morgen opgave (mandag)
Diskuter i grupperne følgende:
Hvad er en Exception?
Hvad benyttes de til?
Hvordan kastes en Exception?
Hvordan gribes en Exception?

Hvad er en Unit Test?
Hvad forstås ved Arrange/Act/Assert?
Hvad skal testes i en unittest?
Hvordan testes? - hvad er class Assert?
Hvordan testes for Exceptions?

Eksempel:
TryingUnitTesting.zip (kode vist i klassen)

Exercise:
Exceptions-Stack

Exceptions-UnitTest


C# Programming Exercises Pro.3.10-11 (findes på GitHub her)
Pro 3.10-11 (Unittest + Exceptions)
TestExampleA.zip
TestExampleB.zip


C#-Projects:
MyStack.zip

Solutions:

TestExampleA-Solution.zip

8.2
23/02

Stack ADT (Abstract Data Type)
Generics
Queue (ADT) Using Collections


Generics:
Noter: s.194-207 (
MSVC#
: Chap. 17p. 369-375)

Morgen opgave (onsdag)
Diskuter i grupperne:
Hvad er Unit test egentligt?.
Hvad er en god unit test?
Hvad betyder [TestClass], [TestMethod] og [TestInitialize]
Hvad er grænseværdi test og hvorfor skal man teste grænser?
Hvordan laves en grænseværdi test med Unittest i praksis?
Hvordan testes for Exceptions?
Diskuter hvordan i kan lave Unittest af Mystack!

Eksempel:
GenericFamilyRelation.zip (kode vist i klassen)


Exercise:
MyGenericStack

GenericCollectionsAndDictionarys


Solutions:
MyStackGenericUnitTest.zip (bemærk solution '.sln' ligger i MyStack)

9.1
28/02
IComparable / IComparer
Equals( ) / GetHashCode( )
Collections:
Noter: s.223-227 (MSVC#:
Chap 18. 399-411)

Collections-Overview
An Overview Of System.Collections.Generic
MSDN: IComparable
MSDN: IComparer
Microsoft docs: Use the IComparable and IComparer ...

Basic Sorting Algorithms In C#

Video:

Visualization and Comparison of Sorting Algorithms

Morgen opgave (mansdag): MystackDiskuter

Exercise:
CollectionsSort (Consol)
SortItems (Razor Pages)

C#-Projects:

CollectionSortTest.zip

Solutions:
CollectionsSort.zip
ItemRazorV4.zip

9.2
02/03
Predicate Deligates
Anonymous functions
Lambda-expressions
IEnumerable / IEnumerator


Functions as parameters (Delegates, Predicates and Lambda):
Noter: s.208-218

Bemærk:

Predicate deligates og anonyme funktioner er lidt "tungt" stof ;)

CodeProject: Understanding Predicate Delegates

Videos:
Anonymous methods in c#

Lambda expression in c#
Func delegate in c# ** bemærk extra !! **


MSDN: Anonymous Methods
MSDN: Delegates
MSDN: Predicate <T> Delegate
MSDN: Lambda expressions
DotnetPerls: C# Lambdas

Morgen opgave (onsdag) - Diskuter:
Del1:
Hvad betyder "{handler?}" i linie 1 (Razor Pages) og hvornår benyttes det?
Hvad er forskellen på 'asp-page' og 'asp-page-handler' og hvornår benyttes de?
Hvis en handler-metode skal have en parameter - hvordan får vi den sendt med?
Hvis vi på en Page har et inputfield til en søgestreng og vi ønsker at kalde en søgefunktion i en service-klasse -
   hvordan gør vi det?
Hvornår benyttes OnGet og hvornår benyttes OnPost?

Del2:
Hvornår skal man redefinere Equals (og HashCode-metoden)?
Hvordan gør man?
Find på et godt eksempel og afprøv det!
Hvornår benyttes IComparable?
Hvad er forskellen på IComparable og IComparable<Item>?
Hvornår benyttes ICompare?
Hvad er forskellen på IComparable og ICompare?


Exercise:
LambdaExpressions


C#-Projects:
DeligateTest.zip
PredicateDeligateTest.zip

Solutions:
LambdaExpressions.zip

10
LINQ LINQ:
Noter: s.232-241 (Bogen: MSVC#
: Chap. 21p.469-481)
WizIQ : LINQ - Language INtegrated Query (slides)
MSDN: Introduction to LINQ
MSDN: 101 LINQ Samples

Videos:
LINQ
Part 1 What is LINQ
Part 2 Writing LINQ queries
Part 3 Extensions Methods in C#
Part 4 LINQ Aggregate Functions
Morgen opgave (mansdag): SearchFilterItemsLambda

Exercise:
SortSearchFilterItemsLINQ
LinqHotelExercice.zip

C#-Projects:
LinqTest.zip

Solutions:
LinqHotels.zip
ItemRazorV5.zip
11   Razor Pages (fortsat)

Exercise:
CookiesAuthentificationItems
GenericJsonFileServiceItems
AuthorizationItems

Solutions:
ItemRazorV6.zip
ItemRazorV7.zip
ItemRazorV8.zip

12


Razor Pages (fortsat) Entity Framework Code First
PART 2: Razor Pages (Chap 3 - side 52 - 60)
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations
https://www.c-sharpcorner.com/article/dataannotations-in-depth/

Razor Pages (fortsat) Entity Framework Code First - Using Generics
PART 2: Razor Pages (Chap 4 - side 76 - 83)

https://www.c-sharpcorner.com/article/navigation-property-with-code-first-navigation-property-in-ef/

Exercise:
DbEFCodeFirstItems
DbGenericServiceItems

Solutions:
ItemRazorV9.zip
ItemRazorV10.zip

13 Projektoplæg

Razor Pages (fortsat) Entity Framework Code First - Relations

Eager Loading of Related Data
Include&ThenInclude
AlsoInclude
Tracking vs. No-Tracking Queries

 

Adding Asynchronous Processing to ASP.NET Core 3.1 Razor Pages

Exercise:

EFCodeFirstRelationsLinqDaoItems
EFCodeFirstRelationsIncludeItems

Solutions:
ItemRazorV11.zip
ItemRazorV12.zip

14.1
4/4

Task, Thread, Asynchron

Microsoft:

Task-based Asynchronous Programming
Asynchronous programming


CodeProject: Asynchronous Programming in C# 5.0 using async and await

Async/Await - Best Practices in Asynchronous Programming

Slides: ProcessesAndThreads (PowerPoint)
Slides: AsynchronousProgramming (PowerPoint)

Joseph Albahari Threading in C#, part 1
Threads in C# (slides)

Example: TryThread | WriteToArray

Ekstra:
Joseph Albahari Threading in C#, part 2

Synchronization: Threads + monitors (slides)

Example: ThreadBank




Exercise
AsyncAwaitTaskItems

 

Solutions:
ItemRazorV13.zip


First thread | Solution
Adding threads to an existing program | Solution

Ekstra:
Producer-Consumer | solution

14.2
6/4

Dokumentation Code Documentation with Doxygen

Exercise O21:


15 Påskeferie    
16

Design Patterns

  • Decorator
  • Factory
  • Observer
  • Adapter
  • State
  • mm.

Lynda.com:
Foundations-Programming-Design-Patterns

Design patterns explained 
Illustrated designpatterns: 1 2 3 4 5

Code-project: Strategy Pattern-C#


DesignPatterns (Note)

Exercise :

PizzaShop

C#-Projects:
PizzaDesignPatterns (løsning til PizzaShop)

Ekstra   MS LiveShare: https://visualstudio.microsoft.com/services/live-share/

Forslag:
Når I sidder derhjemme og keder jer, så se evt.: https://www.linkedin.com/learning/git-essential-training-the-basics/view-the-commit-log?u=37487420

og læs: How to use Github in VS2019

og se evt følgende GitHub Video Tutorial (By Mohammed):
Gruppeopgave: MS-Live-Share.html
17-21 Projektarbejde

Projektaflevering: Eksempler på tidligere opgaver:
GameMasterTools.pdf
Flygo og DriversApp (zip)
22-24 Eksamenslæsning Pensumliste