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

Semester: 2.sem., forår 2021
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 Channel:
K01 U5 tirs SWC - Introduktion og Rep
Kl. 9.10
Introduktion til semestret ved Jamshid/Henrik
Vi 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:
KlimavenligtKlasselokale.pdf
ProficiencyTest2021BikeRentalSystem.pdf

Eksempel:
ItemRazorV3.zip (vist i klassen)

Exercise:
UserStoriesPart1.pdf
UserStoriesPart2.pdf
UserStoriesPart3.pdf

Solutions:
UserStoriesPart1.zip
UserStoriesPart2.zip
UserStoriesPart3.zip

7 Channel: General


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 (tirsdag)
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 16/2)


Morgen opgave
(torsdag)
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 (opdateret - 16/2)
BrushUp

ISpeak (Philosopher)

OOP.2.7


Solutions:
ISpeak.zip

8
23/02
Channel: General
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 (tirsdag)
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
25/02

Channel: General
Stack ADT (Abstract Data Type)
Generics
Queue (ADT) Using Collections


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

Morgen opgave (torsdag)
I mødes ved bordene og diskuterer:
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!


Exercise:
MyGenericStack

GenericCollectionsAndDictionarys


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

9
02/03
Channel: General
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 (tirsdag): MystackDiskuter

Exercise:
CollectionsSort (Consol)
SortItems (Razor Pages)

C#-Projects:

CollectionSortTest.zip

Solutions:
CollectionsSort.zip
ItemRazorV4.zip

9
04/03
Channel: General
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 (torsdag) - 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
09/03
Channel: General
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 (tirsdag): 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 Påskeferie    
14 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 Opdateret!
EFCodeFirstRelationsIncludeItems Nyt!

Solutions:
ItemRazorV11.zip
ItemRazorV12.zip

15
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 Opdateret! (så nu virker Edit/Delete også)


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

Ekstra:
Producer-Consumer | solution

15.2 - 16.1

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)

16.2 Dokumentation Code Documentation with Doxygen

Exercise O21:


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

Projektoplæg
Projektaflevering: Wiseflow d. 28. maj kl. 12.00
Præsentation (Demodag): Aflyst
Eksempler på tidligere opgaver:
GameMasterTools.pdf
Flygo og DriversApp (zip)
22-24 Eksamenslæsning
Eksamen 15-17 juni Mødeliste
Repetition/Spørgetimer: 03/06 kl. 10.00 (MSTeams)
Pensumliste