Zajęcia, rok akademicki 2018/2019, semestr 2
Projektowanie obiektowe oprogramowania
	
  Wykład skierowany jest do przyszłych architektów i projektantów systemów
  informatycznych oraz do wszystkich programistów zainteresowanych
  udoskonaleniem swojego warsztatu. Celem wykładu jest zapoznanie
  studentów z kanonem współczesnych narzędzi w zakresie projektowania
  obiektowego oprogramowania.
 Materiał wykładu obejmuje:
 
 
  - język UML w zakresie wymaganym przez projekty analityczne
  i techniczne
  
 - przegląd katalogu refaktoryzacji
  
 - przegląd katalogu wzorców projektowych (GoF) (m.in. Observer,
  Builder, Bridge, State, Strategy, Facade, Adapter, Mediator, itd.)
  
 - przegląd katalogu wzorców aplikacyjnych 
  (m.in. Event Aggregator, Model-View-Controller, Model-View-Presenter, Object-Relational Mapping, Dependency Injection, Mock Object)
  
 - przegląd katalogu wzorców architektonicznych
  (m.in. Single Sign-on, SOA, Enterprise Service Bus, Command-Query Responsibility Separation)
 
 
  Celem pracowni jest praktyczny kontakt z materiałem z wykładu.
  
 Wymagania
 
 Wymagany ukończony kurs języka Java lub C# - wszystkie przykłady będą bazowały na języku C#, 
 a większość zadań studenci będą rozwiązywali w językach C# lub Java (do wyboru).
 
 Organizacja pracy
 
 Podczas wykładu omawiane są kolejne zagadnienia według programu. Podczas ćwiczeń studenci zgłaszają gotowość do 
 zaprezentowania rozwiązań wybranych przez siebie zadań, wypełniając wcześniej standardowe paski deklaracji.
 
 Prowadzący sprawdza indywidualnie (lub grupowo dla niektórych zadań, według uznania prowadzącego) rozwiązania wybranych zadań. Obecność na ćwiczeniach jest w związku z tym nieobowiązkowa.
 Podstawą zaliczenia jest liczba zgromadzonych punktów. 
 
 
   
      | 5.0 |  >= 75% (60+p) | 
   
      
      | 4.0 |  >= 50% (40-60p) | 
   
      
      | 3.0 |  >= 25% (20-40p) | 
   
      
      | 2.0 |  < 25% (-20p) | 
   
 
 Egzamin
 
 Egzamin odbędzie się dnia 21.06.2019 (piątek) w godz. 08:30-10:00 w sali 25.
 Egzamin ma formę pisemną.
 Rankingi cząstkowe (grupa WZY) 
 
 
 
 Odnośniki do wykładów
- Wykład 1 2019-02-26 Wprowadzenie do projektowania obiektowego
 
- Wykład 2 2019-03-05 Język UML
 
- Wykład 3 2019-03-12 SOLID GRASP
 
- Wykład 4 2019-03-19 Wzorce projektowe (1)
 
- Wykład 5 2019-03-26 Wzorce projektowe (2)
 
- Wykład 6 2019-04-02 Wzorce projektowe (3)
 
- Wykład 7 2019-04-09 Wzorce projektowe (4)
 
- Wykład 8 2019-04-16 Wzorce projektowe (5)
 
- Wykład 9 2019-04-30 Wzorce architektury aplikacji (1)
 
- Wykład 10 2019-05-07 Wzorce architektury aplikacji (2)
 
- Wykład 11 2019-05-14 Wzorce architektury aplikacji (3)
 
- Wykład 12 2019-05-21 Wzorce architektury aplikacji (4)
 
- Wykład 13 2019-05-28 Testowanie oprogramowania
 
- Wykład 14 2019-06-04 Architektura systemów (1)
 
- Wykład 15 2019-06-11 Architektura systemów (2)
 
 
 
 Laboratoria
 
 
 
 Wykłady
 
 
 
- 2019-02-26, Wprowadzenie do projektowania obiektowego
	
	- Omówienie programu wykładu
	
 - Analiza obiektowa - Unified Process
	
		- Zbieranie wymagań: FURPS+, S.M.A.R.T.
		
 - Przypadki użycia - notacja skrócona, pełna
		
 - Model pojęciowy, techniki tworzenia ("lista kategorii", "metoda fraz rzeczownikowych")
	
 
	 
Notatki do wykładu 1
	
Zestaw 1 (do 2019-03-12)
 - 2019-03-05, Język UML
	
		- Diagramy klas
			
				- Diagramy modeli pojęciowych
				
 - Diagramy obiektów (klas)
				
 - Diagramy implementacyjne (struktur relacyjnych)
				
 - Diagramy obiektów
			
 
		 - Diagramy komponentów
		
 - Diagramy sekwencji
		
 - Diagramy czynności
		
 - Diagramy stanów
		
 - Zwięzła ściągawka
	
 
Notatki do wykładu 2
	
Zestaw 2 (do 2019-03-19)
 - 2019-03-12, SOLID GRASP
	
	- SOLID
		
		- Single Responsibility Principle
		
 - Open Closed Principle
		
 - Liskov Substitution Principle
		
 - Iinterface Segregation Principle
		
 - Dependency Inversion Principle
		
 
	 - GRASP
		
		- Creator
		
 - Information Expert
		
 - Low Coupling
		
 - High Cohesion
		
 - Controller
		
 - Protected Variations
		
 - Polymorphism
		
 - Pure fabrication
		
 - Indirection
		
 
	 
Notatki do wykładu 3
	
Zestaw 3 (do 2019-03-26)
 - 2019-03-19, Wzorce projektowe (1)
	
	- Wzorce podstawowe
		
		- Interface vs abstract class
		
 - Delegation vs inheritance
		
 
	 - Wzorce kreacyjne
	    
		- Singleton
		
 - Monostate
		
 - Factory
		
 - Template method
		
 - Abstract factory
		
 - Object pool
			
			- Jak testować kreowanie w ścieżce pozytywnej (pool zwraca obiekt)?
			
 - Jak testować scenariusz niepowodzenia (przekroczenie wielkości pool)?
			
 - Jak testować metodę do zwracania obiektu do pool?
			
 - Z czego wynika taka a nie inna specyfika implementacji, w której istnieje konieczność zapamiętania referencji
				do obiektów wydanych klientom? Jak inaczej zaprojektować interfejs pool tak, żeby uniknąć tej niedogodności?
			
 
		 
	 - Testy jednostkowe - framework NUnit, NUnit.Runners
	
 
Notatki do wykładu 4
	
Zestaw 4 (do 2019-04-02)
 - 2019-03-26, Wzorce projektowe (2)
	
	- Wzorce strukturalne
	    
		- Builder
		
 - Facade
		
 - Decorator
		
 - Proxy
		
 - Adapter
		
 - Flyweight
		
 - Bridge
		
 - Read-only interface
		
 
	 
Notatki do wykładu 5
	
Zestaw 5 (do 2019-04-09)
 - 2019-04-02, Wzorce projektowe (3)
	
	- Wzorce czynnościowe (1)
		
		- Interpreter
		
 - Composite
		
 - Visitor
		
 - Null object
		
 - Iterator
		
 
	 
Notatki do wykładu 6
Zestaw 6 (do 2019-04-16)
 - 2019-04-09, Wzorce projektowe (4)
	
	- Wzorce czynnościowe (2)
		
		- Observer
		
 - Mediator
		
 - Event Aggregator 
		
 - Memento 
		
 
	 
Notatki do wykładu 7
	
Zestaw 7 (do 2019-04-30)
 - 2019-04-16, Wzorce projektowe (5)
	
	- Wzorce czynnościowe (3)
		
		- Chain of Responsibility
		
 - Command
		
 - State
		
 - Strategy
		
 - Template method
		
 
	 
Notatki do wykładu 8
	
Zestaw 8 (do 2019-05-07) 
 - 2019-04-30, Wzorce architektury aplikacji (1)
	
	- Automated code generation
	
 - Object-relational mapping
		
		- Database first vs model first vs code first
		
 - Metadata mapping
		
 - Navigation properties
		
 - Lazy loading
		
 - One-to-one
		
 - Many-to-many
		
 - Hierarchy mapping (TPC/TPH/TPT)
		
 - 1st level cache vs 2nd level cache
		
 - Query language
		
 - Global filter
		
 - Soft delete
		
 
	 
Notatki do wykładu 9
 - 2019-05-07, Wzorce architektury aplikacji (2)
	
	- Dependency Injection/Inversion of Control
	
 
Notatki do wykładu 10
	
Zestaw 9 (do 2019-05-21)
 - 2019-05-14, Wzorce architektury aplikacji (3)
	
	- Repository - Concrete Repository vs Generic Repository
	
 - Unit of Work
	
 
Notatki do wykładu 11
	
Zestaw A (do 2019-05-28)
Przykład z wykładu 
	
 - 2019-05-22, Wzorce architektury aplikacji (4)
	
	- Model-View-Controller
	
 - Model-View-Presenter 
	
 
Notatki do wykładu 12
	
Zestaw B (do 2019-06-04)
Przykład z wykładu
 - 2019-05-28, Testowanie oprogramowania
	
	- TDD - Test Driven Development
	
 - BDD - Behavior-Driven Design
	
 - Dummy vs Stub vs Fake vs Mock
	
 - Testowanie za pomocą ram typów zastępczych
	
 - Design by Contract: Code Contracts
	
 
Notatki do wykładu 13
 - 2019-06-04, Architektura systemów (1)
	
	- Interoperability
	
 - PKI, X.509, PKCS#12
	
 - XmlDSign, XaDES
	
 - SAML/OAuth2
		
	
 - interoperacyjność klasy enterprise w praktyce - ePUAP (Elektroniczna Platforma Usług Administracji Publicznej)
		
		- Interoperacyjność uwierzytelniania - logowanie SAML2 za pomocą Profilu Zaufanego
		
 - Interoperacyjność usług - przykładowa usługa podpisywania dokumentów, zgodna z WS-Security
		
 
	 
Notatki do wykładu 14
	
Zestaw C (ostatni) (do końca semestru)
 - 2019-06-11, Architektura systemów (2)
	
Notatki do wykładu 15
    
	
 
    
 Literatura podstawowa
 
 - Wrycza, Marcinkowski, Wyrzykowski - Język UML 2.0 w modelowaniu systemów informatycznych
 
 - Fowler - Refactoring: Improving the Design of Existing Code
 
 - Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software
 
 - B.Martin, M.Martin. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania oprogramowania w C#.
 
 - Larman - UML i wzorce projektowe. Analiza i projektowanie obiektowe oraz iteracyjny model wytwarzania aplikacji
 
 - Fowler - Patterns of Enterprise Application Architecture
 
 - Microsoft Patterns & Practices - Application Architecture Guide	
 
 
	
 Literatura uzupełniająca
 
 - Seeman - Dependency Injection in .NET
 
 - Hohpe, Wolf - Enterprise Integration Patterns
 
 - Betts, Dominguez et al. - Exploring CQRS and Event Sourcing