Poznanie i praktyczne zastosowanie wzorów kreacyjnych w programowaniu obiektowym. W trakcie zajęć studenci nauczą się, jak tworzyć obiekty w sposób elastyczny i kontrolowany, przy użyciu wzorców takich jak Singleton, Factory Method, Abstract Factory, Builder oraz Prototype.
Celem laboratorium jest wprowadzenie studentów do wzorów kreacyjnych w programowaniu obiektowym, które są używane do kontrolowania i optymalizowania procesu tworzenia obiektów. Studenci nauczą się:
- Rozpoznawać sytuacje, w których zastosowanie wzorców kreacyjnych przynosi korzyści.
- Implementować wzorce takie jak Singleton, Factory Method, Builder w językach Java i C++.
- Zrozumieć, w jaki sposób wzorce te wspierają projektowanie modularnych i skalowalnych systemów.
Laboratorium obejmuje następujące wzorce kreacyjne:
- Singleton – Gwarantuje istnienie tylko jednej instancji klasy i umożliwia globalny dostęp do niej.
- Factory Method – Umożliwia tworzenie obiektów bez ujawniania konkretnej klasy obiektu.
- Builder – Ułatwia tworzenie złożonych obiektów przez rozdzielenie procesu konstrukcji od finalnej reprezentacji.
- Prototype – Tworzy nowe obiekty poprzez klonowanie istniejących.
Po ukończeniu laboratorium studenci:
- Zrozumieją znaczenie wzorców kreacyjnych w procesie projektowania oprogramowania.
- Nauczą się implementować wybrane wzorce w językach Java i C++.
- Będą potrafili wybrać odpowiedni wzorzec kreacyjny dla konkretnego problemu w projekcie.
- Docenią elastyczność, którą wzorce te wprowadzają do projektowania systemów.
-
Singleton
Gwarantuje istnienie tylko jednej instancji klasy w aplikacji i zapewnia globalny dostęp do niej. -
Factory Method
Definiuje interfejs tworzenia obiektu, pozwalając podklasom decydować, jaki obiekt utworzyć. -
Abstract Factory
Umożliwia tworzenie rodzin powiązanych obiektów bez określania ich konkretnych klas. -
Builder
Rozdziela konstrukcję złożonego obiektu od jego reprezentacji, umożliwiając tworzenie różnych reprezentacji. -
Prototype
Tworzy nowe obiekty poprzez klonowanie istniejących obiektów.
- Singleton:
- Używany w systemach zarządzających zasobami, np. połączeniami z bazą danych, rejestratorami logów.
- Zaleta: gwarancja jednej instancji.
- Factory Method:
- Sprawdza się w sytuacjach, gdy klasa bazowa definiuje metodę tworzenia obiektów, ale decyzja o tym, jaka klasa zostanie utworzona, należy do podklasy.
- Builder:
- Idealny do tworzenia złożonych obiektów, np. konfiguracji użytkownika, pojazdów z opcjonalnymi elementami.
- Prototype:
- Pomocny w sytuacjach, gdy tworzenie obiektów jest kosztowne, a klonowanie istniejących instancji pozwala na oszczędność zasobów.
Opis:
Utwórz klasę zarządzającą połączeniem z bazą danych, która zapewnia, że istnieje tylko jedna instancja tej klasy.
class DatabaseConnection {
private DatabaseConnection() {
}
public static DatabaseConnection getInstance() {
}
public void executeQuery(String query) {
}
}
public class Main {
}#include ...
class DatabaseConnection {
public:
static DatabaseConnection* getInstance() {
};
int main() {
cout << "Czy obie instancje są takie same? " << (connection1 == connection2) << endl;
return 0;
}Opis:
Utwórz system tworzenia różnych typów pojazdów (np. samochodów i rowerów) za pomocą metody fabrycznej.
abstract class Vehicle {
}
class Car extends Vehicle {
}
class Bike extends Vehicle {
}
class VehicleFactory {
}
public class Main {
public static void main(String[] args) {
}#include ...
class Vehicle {
};
class Car : public Vehicle {
};
class Bike : public Vehicle {
};
class VehicleFactory {
};
int main() {
}Opis:
Utwórz klasę do budowania różnych wariantów pizzy, takich jak Margarita lub Pepperoni.
class Pizza {
private Pizza(PizzaBuilder builder) {
}
public static class PizzaBuilder {
public PizzaBuilder dough(String dough) {
}
public PizzaBuilder sauce() {
}
public PizzaBuilder topping() {
}
public Pizza build() {
}
@Override
}
public class Main {
public static void main(String[] args) {
System.out.println(pizza);
}
}#include ...
class Pizza {
public:
class Builder {
public:
Builder& setDough() {
}
Builder& setSauce() {
}
Builder& setTopping() {
}
Pizza build() {
}
};
void display() const {
}
};
int main() {
return 0;
}Podczas laboratorium studenci:
- Poznają podstawowe wzorce kreacyjne i ich zastosowanie.
- Zrozumieją różnice między wzorcami i w jakich sytuacjach należy je stosować.
- Stworzą przykłady kodu w Java i C++, co pogłębi ich zrozumienie wzorców kreacyjnych.
Laboratorium pozwala studentom zrozumieć, jak wzorce kreacyjne wpływają na:
- Modularność – Możliwość łatwej modyfikacji systemu bez zmiany jego podstawowych komponentów.
- Skalowalność – Łatwiejsze dostosowanie systemu do zmieniających się wymagań.
- Efektywność kodu – Optymalizacja procesu tworzenia obiektów.
Dzięki praktycznym zadaniom w językach Java i C++, studenci nauczą się stosować te wzorce w rzeczywistych projektach. Laboratorium to jest fundamentem do dalszego zgłębiania wzorców projektowych i ich zastosowań w zaawansowanych systemach.