- Nazwa przedmiotu:
- Programowanie obiektowe
- Koordynator przedmiotu:
- Rajmund Kożuszek
- Status przedmiotu:
- Obowiązkowy
- Poziom kształcenia:
- Studia I stopnia
- Program:
- Informatyka
- Grupa przedmiotów:
- Przedmioty techniczne
- Kod przedmiotu:
- PROI
- Semestr nominalny:
- 2 / rok ak. 2021/2022
- Liczba punktów ECTS:
- 4
- Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
- 3. liczba godzin kontaktowych – 55 godz., w tym
obecność na wykładach: 30 godz.,
obecność na zajęciach laboratoryjnych:15 godz.,
udział w konsultacjach związanych z problematyką poruszaną na wykładzie//laboratorium/zajęcia wprowadzające do projektu: 2 godz.,
udział w konsultacjach projektowych: 8 godz.,
4. praca własna studenta – 60 godz., w tym
rozwiązywanie zadań i problemów przedstawianych na zajęciach laboratoryjnych 20 godz.,
udział w dyskusji w trakcie wykładu: 1 godz.,
analiza literatury i materiałów wykładowych związana z przygotowaniem do kolejnych wykładów, zajęć laboratoryjnych, projektu, instalacja oprogramowania: 10 godz.,
realizacja zadań projektowych, przygotowanie dokumentacji: 25 godz. ,
przygotowanie do kolokwium: 4 godz.
Łączny nakład pracy studenta wynosi 115 godz., co odpowiada 4 pkt. ECTS.
- Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
- 2 pkt. ECTS, co odpowiada 55 godz. kontaktowym
- Język prowadzenia zajęć:
- polski
- Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
- 2 pkt. ECTS, co odpowiada 50 godz. zajęć laboratoryjnych i projektowych przygotowaniu do tych zajęć, oraz przygotowanie dokumentacji projektowej
- Formy zajęć i ich wymiar w semestrze:
-
- Wykład30h
- Ćwiczenia0h
- Laboratorium15h
- Projekt15h
- Lekcje komputerowe0h
- Wymagania wstępne:
- Konieczna jest znajomość podstawowych algorytmów i umiejętność projektowania prostych struktur danych, a także umiejętność opracowania algorytmów na podstawie opisu słownego oraz programowania w językach strukturalnych.
- Limit liczby studentów:
- 150
- Cel przedmiotu:
- Celem przedmiotu jest zapoznanie studenta z metodyką programowania i modelowania obiektowego oraz rodzajowego z wykorzystaniem mechanizmów języka C++.
Studenci nauczą się tworzyć abstrakcje bytów rzeczywistych w taki sposób aby ukrywać szczegóły techniczne, a jednocześnie pozwalać na łatwą rozbudowę oprogramowania. Podczas wkładu omawiane są konkretne mechanizmy języka, które używane są w trakcie realizacji zadań laboratoryjnych. Projekt, realizowany w zespołach kilkuosobowych, pozwala zdobyć umiejętności projektowania obiektowego aplikacji oraz rozwija umiejętność pracy grupowej.
- Treści kształcenia:
- WYKŁADY:
1. Ewolucja metod programowania: programowanie proceduralne, sterowane danymi, modularne. Zasada ukrywania szczegółów, abstrakcyjne typy danych. Pojęcia podstawowe programowania obiektowego: obiekty, klasy, dziedziczenie, polimorfizm; struktury dziedziczenia. Informacje wprowadzające o programowaniu rodzajowym. Przykład migracji rozwiązania problemu od wersji proceduralnej do obiektowej. (3 godz.)
2. Projektowanie obiektowe: modelowanie obiektowe, podstawy modelowania, diagramy klas UML, omówienie relacji dziedziczenia, agregacji i kompozycji. Narzędzia kontroli wersji i pracy grupowej, określenie zadań, punktów kontrolnych. Podstawy testowania – testy jednostkowe, TDD. Przenośność kodu, refaktoryzacja kodu. Budowa aplikacji C++, kompilacja, konsolidacja, biblioteki, środowiska IDE. (3 godz.)
3. Mechanizmy pomocnicze języka C++: podstawy składni języka (instrukcje warunkowe, pętle, kontenery iteratory - przykłady użycia), przegląd systemu typów, typ referencyjny; podstawy współpracy z WE/WY strumieniowym. Elementy programowania niskopoziomowego – język C. Przeciążenia funkcji i operatorów (polimorfizm statyczny), prototypy funkcji, listy parametrów formalnych, parametry predefiniowane; funkcje rozwijane. Tworzenie obiektów dynamicznych, operatory new, new [], delete, delete [].(4 godz.)
4. Klasy autonomiczne: definiowanie klas samodzielnych, składowe klasy, kontrola dostępu; zaprzyjaźnienia. Konstruktory i destruktory. Różnice pomiędzy klasami z wyróżnikiem class, struct i union. Projektowanie klas autonomicznych, klasa Fraction. Składowe statyczne. Klasy ze zmienną strukturą wewnętrzną, postać kanoniczna. Klasy zagnieżdżone, zastosowanie. (3 godz.)
5. Szablony i podstawy programowania rodzajowego. Definiowanie szablonów klas i funkcji, parametryzacja szablonów. Specjalizacje szablonów. Funkcje składowe szablonowe. Zasady programowania rodzajowego. (3 godz.)
6. Dziedziczenie i polimorfizm: dziedziczenie bezpośrednie, pośrednie, pojedyncze, wielobazowe. Klasy bazowe wirtualne. Dziedziczenie a zawieranie. Polimorfizm dynamiczny, funkcje wirtualne, mechanizm aktywacji funkcji wirtualnych; obiekty polimorficzne. Funkcje wirtualne czyste, klasy abstrakcyjne i interfejsy. Szablony w dziedziczeniu. Model obiektu w C++. Tworzenie i destrukcja obiektów polimorficznych. (4 godz.)
7. Obsługa sytuacji wyjątkowych: mechanizm reagowania na sytuacje wyjątkowe, składnia i semantyka bloku try i bloków obsługi catch, aktywowanie wyjątku przez throw. Funkcje standardowe terminate(), unexpected (), set_terminate (), set_unexpected (). Zasady projektowania programów bezpiecznych, metodologia RAII, klasa szablonowa auto_ptr/unique_ptr. Wyjątki standardowe. (3 godz.)
8. Polimorfizm i RTTI: Mechanizmy C++ do identyfikacji typów w czasie wykonania programu. Kontrolowane konwersje polimorficzne, zastosowania operatorów dynamic_cast i typeid; wyjątek bad_cast. (4 godz.)
9. Biblioteka standardowa C++: Podstawowe akcesoria biblioteki - kontenery, iteratory i algorytmy. Klasyfikacja usług biblioteki standardowej; przegląd kontenerów sekwencyjnych i asocjacyjnych. Wsparcie dla współpracy ze strumieniami i przetwarzania tekstów. Elementy wielowątkowości, rozszerzenia C++14, C++17, proste wzorce projektowe(3 godz.)
LABORATORIUM:
Studenci opracowują programy uwzględniające istotne aspekty programowania obiektowego. Problemy do rozwiązania obejmują: projektowanie klas autonomicznych, przeciążenie funkcji i operatorów, projektowanie klas ze zmienną strukturą obiektów, wykorzystanie reprezentacji grupowej obiektów, definiowanie szablonów klas i funkcji, wykorzystanie dziedziczenia i funkcji wirtualnych, obsługę sytuacji wyjątkowych, współpracę ze strumieniami, projektowanie klas kontenerowych i iteratorów a także wykorzystanie akcesoriów biblioteki standardowej.
PROJEKT:
W ramach projektu 2-3 osobowy zespół ma za zadanie przygotować kompletną aplikację.
Wymagana jest odpowiednia dekompozycja projektu, podział zadań, projekt podziału na klasy, opracowanie mechanizmu komunikacji między klasami. Niezbędne jest korzystanie z narzędzi do wersjonowania kodu i pracy grupowej, oraz przygotowanie testów jednostkowych.
- Metody oceny:
- Realizacja przedmiotu obejmuje następujące formy zajęć:
– wykład prowadzony w wymiarze 2 godz. tygodniowo;
– zajęcia laboratoryjne; w ramach tych zajęć student, korzystając z oprogramowania i sprzętu będzie – pod opieka prowadzącego zajęcia – realizował wskazane zadania związane tematycznie z treścią wykładu w wymiarze 1 godz. tygodniowo;
– zajęcia projektowe; w ramach tych zajęć student – korzystając z konsultacji prowadzącego zajęcia – będzie wykonywał zadanie związane z realizacją prostej aplikacji.
Sprawdzanie założonych efektów kształcenia realizowane jest przez:
– ocenę wiedzy i umiejętności związanych z realizacją zadań laboratoryjnych – ocenę sprawozdań z realizacji zadań;.
– ocenę wiedzy i umiejętności związanych z realizacją zadań projektowych – ocenę prezentacji, dokumentacji i raportów z systemu;
– ocenę wiedzy i umiejętności wykazanych na kolokwiach oraz – w przypadkach szczególnych – na kolokwium ustnym,
- Egzamin:
- nie
- Literatura:
- 1. B. Stroustrup: Język C++, WNT, 2002, 2008
2. B. Stroustrup: Język C++. Kompendium wiedzy, WNT, 2014
2. S. B. Lippman: Podstawy języka C++, WNT 2001, 2003.
3. Jerzy Grębosz: Opus magnum C++11. Programowanie w języku C++, Helion 2017
4. Bruce Eckel: Thinking in C++. Edycja polska, tom1, tom2 Helion 2002, 2004.
- Witryna www przedmiotu:
- https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103B-INxxx-ISP-PROI
- Uwagi:
- (-)
Efekty uczenia się
Profil ogólnoakademicki - wiedza
- Charakterystyka W01
- zna podstawy modelowania obiektowego
Weryfikacja: projekt, laboratorium, kolokwium
Powiązane charakterystyki kierunkowe:
W09, W08
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W02
- zna podstawowe zasady stosowania hermetyzacji, mechanizmu dziedziczenia i polimorfizmu
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W03
- zna podstawy dynamicznych struktur danych
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
W05, W08
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W04
- zna pojęcie szablonów i typów generycznych
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
W05, W08
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W05
- zna mechanizmy obsługi operacji wejścia wyjścia i obsługi wyjątków
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
W08
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
Profil ogólnoakademicki - umiejętności
- Charakterystyka U01
- potrafi projektować proste klasy stosując odpowiednie pola i metody wykorzystując prawidłowo hermetyzację
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
U04, U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U02
- w sposób właściwy potrafi używać dziedziczenia, agregacji oraz kompozycji
Weryfikacja: laboratorium, projekt, sprawdziany
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U03
- potrafi tworzyć i zarządzać dynamicznymi strukturami danych
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U04
- potrafi napisać prosty program wykorzystujący biblioteki standardowe
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U05
- potrafi korzystać z mechanizmu obsługi wyjątków
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U06
- potrafi tworzyć i wykorzystywać typy generyczne
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U07
- potrafi pracować w zespole, planuje i realizuje przygotowany harmonogram pracy
Weryfikacja: projekt
Powiązane charakterystyki kierunkowe:
U07, U08, U09
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UO, I.P6S_UK
Profil ogólnoakademicki - kompetencje społeczne
- Charakterystyka K01
- ma świadomość konieczności komunikowania się z otoczeniem, w sposób zrozumiały dla odbiorcy
Weryfikacja: projekt
Powiązane charakterystyki kierunkowe:
K05
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KO
- Charakterystyka K02
- jest świadomy potrzeby śledzenia zmian i rozwoju języków programowania i narzędzi
Weryfikacja: projekt
Powiązane charakterystyki kierunkowe:
K01
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KK
- Charakterystyka K03
- rozumie potrzebę weryfikacji własnych rozwiązań przez członków zespołu i ekspertów
Weryfikacja: projekt
Powiązane charakterystyki kierunkowe:
K03
Powiązane charakterystyki obszarowe:
I.P6S_KR, P6U_K, I.P6S_KK