Projekty

PVA

Bc. Matěj Cajthaml ©

Smíchovská střední průmyslová
škola a gymnázium

icon

Proč přemýšlet o projektech?

Důležiost přípravy

  • nechceme jen bušit kód
  • nechceme nad vším přemýšlet během programování
  • nechceme se ztratit v projektu
  • nechceme ztrácet čas a motivaci

  • a proto...
  • je důležité nad projektem přemýšlet

Co by se mohlo stát?

  • zapomeneme na něco důležitého
  • nebudeme vědět vůbec, co dělat
  • nepochopíme, co chce zadavatel

  • a to může vést k...
  • ztrátě času a peněz, protože...
  • budeme muset něco předělávat
  • v nejhorším případě celý projekt

Stavěli byste dům bez plánů? A co mrakodrap?

Co je to projekt?

  • projekt je časově omezená činnost
  • má jasný cíl
  • má jasně definované požadavky, zdroje

Metodika řízení projektů

  • způsob, jakým řídíme projekt
  • pomáhá nám udržet projekt pod kontrolou
  • plánování, řízení, kontrola, ukončení

  • např. Waterfall, Agile, SCRUM, ...

Agilní a SCRUM

Samostatná práce

Zjistěte, co znamená agilní metodika a zjistěte si pár informací o metodice SCRUM.

Rozdělení projektů

  • ve většině případů dělíme projekt na fáze

  • analýza
  • návrh
  • implementace
  • testování
  • nasazení

Analýza

Co je cílem analýzy?

  • pochopení projektu a jeho cílů
  • zjištění požadavků
  • zjištění možností a rizik

Požadavky

  • funkční:
    • co má aplikace umět
    • např. přihlášení, zobrazení uživatelů, ...
  • nefunkční:
    • jak má aplikace fungovat
    • např. rychlost, bezpečnost, ...

Cílová skupina

  • kdo bude aplikaci používat?
  • co od aplikace očekávají?
  • jaké mají zkušenosti?
  • často více typů uživatelů

Technické předpoklady

  • co máme k dispozici?
  • co je omezeno? (např. kvůli bezpečnosti)

Rizika

  • co jsou možné překážky?
  • co může způsobit problémy?
  • např. kompatibilita, výkon, čas, ...
  • a jak se s tím vypořádat?

Analýza projektu

Skupinová práce

Ve skupinách dostanete zadání projektu. Vaším úkolem bude analyzovat projekt.

Sepsat informace:

  • funkční a nefunkční požadavky
  • kdo jsou uživatelé a jak s aplikací pracují
  • technické předpoklady
  • rizika a možné problémy

Zadání:

  1. aplikace pro správu TODO seznamů (Google Keep)
  2. aplikace pro nakupování potravin (Košík)
  3. školní informační systém (Bakaláři)

Návrh

Co je cílem návrhu?

  • pokračuje po analýze
    • co má aplikace dělat
  • odpovídá na jak to uděláme

Architektura

  • backend = to, co je na serveru a uživatel o tom neví
  • frontend = to, co vidí uživatel

  • budeme mít pouze aplikaci na zařízení? jak bude vypadat frontend?
  • budeme tvořit i server? jak backend vytvoříme?
  • jakou databázi použijeme? MySQL, SQLite, ...

  • jak budou komunikovat jednotlivé části?

Architektura

Ukázka architektury

Modelování

  • jaké data budeme ukládat?
  • jak budou data propojena?
  • jak budou data omezena? jaké budou mít formáty?

Uživatelské rozhraní

  • jak bude aplikace vypadat?
  • jaké budou ovládací prvky?
  • jak bude uživatel s aplikací pracovat?
  • často řešíme pouze základní stránky
  • wireframe
  • ignorujeme design

Wireframe

Ukázka wireframe

Technologie

  • jaké technologie budeme používat?
  • proč jsme si vybrali tyto technologie?
  • jak nás mohou technologie omezit?
  • co vlastně umíme?

UML diagramy

  • diagramy pro modelování
  • např.:
    • activity — modelujeme co aplikace dělá v různých situacích
    • class — modelujeme data a jejich vztahy s ostatními daty
    • use case — modelujeme, co jaký typ uživatele dělá
    • ... a další

Diagram aktivit

Ukázka diagramu aktivit

Návrh projektu

Skupinová práce

Ve skupinách z minulého projektu pokračujte, a navrhněte způsob řešení projektu z Vámi vytvořené analýzy.

Sepsat informace:

  • jak aplikaci rozdělíte na části
  • jak budou jednotlivé části komunikovat
  • jaká data budou ukládána
  • jaké technologie použijete

Implementace

Implementace

  • převádíme návrh do kódu
  • řešíme problémy, které se objeví
  • testujeme, zda vše funguje
  • dokumentujeme, co jsme udělali

V již návrhu je nutné přemýšlet o logickém rozdělení kódu a jeho strukturu. Jak kód můžeme rozdělit?

Třída a instance

  • třída = šablona pro tvorbu objektů
    • např. User, Product, Timer, ...
  • instance = konkrétní realizace třídy s vlastními daty
    • např. konkrétní uživatel, konkrétní produkt, ...
  • třídy mohou obsahovat metody — funkce, které mohou pracovat s daty instance

Ukázka třídy v Pythonu

class User:
    def __init__(self, username, email):
        self.username = username
        self.email = email

user1 = User("john_doe", "john@example.com")
user2 = User("jane_mar", "jane@example.com")

print(user1.username)

Ukázka třídy v Rustu

struct User {
    username: String,
    email: String,
}

impl User {
    fn new(username: &str, email: &str) -> User {
        User {
            username: username.to_string(),
            email: email.to_string(),
        }
    }
}

fn main() {
    let user1 = User::new("john_doe", "john@example.com");
    let user2 = User::new("jane_mar", "jane@example.com");

    println!("{}", user1.username);
}

Ukázka třídy v C++

class User {
public:
    // Constructor
    User(const std::string& username, const std::string& email)
        : username(username), email(email) {}

    // Member variables
    std::string username;
    std::string email;
};

int main() {
    // Creating User objects
    User user1("john_doe", "john@example.com");
    User user2("jane_mar", "jane@example.com");

    // Printing the username of user1
    std::cout << user1.username << std::endl;

    return 0;
}

Můžeme instance předávat mezi funkcemi a třídami?

OOP

  • Object-Oriented Programming (objektově orientované programování)
  • paradigma programování
  • programování s objekty
  • třídy, instance, dědičnost, zapouzdření, ...
  • většina moderních jazyků
  • Python, Java, C++, Rust, ...

Proč OOP?

  • abstrakce = nepotřebujeme vědět, jak třída funguje, stačí nám vědět, co dělá
  • modularita = můžeme kód rozdělit na části, které můžeme měnit nezávisle a znovu použít
  • zapouzdření = můžeme skrýt detaily implementace a pracovat s třídou jako s celkem
  • dědičnost = můžeme vytvářet nové třídy na základě již existujících
  • a další...

Struktury a třídy

Práce

Zjistěte si, co jsou to struktury a třídy v programovacím jazyce, který používáte. Obsahuje jazyk oba koncepty? Jak se liší?

Paradigmata programování

  • imperativní: jasné příkazy, co má program dělat
  • deklarativní: popisujeme, co chceme, ne jak to udělat
  • funkcionální: programování pomocí funkcí
  • logické: programování pomocí logických pravidel
  • objektově orientované: programování s objekty
  • datové: programování pomocí datových struktur bez objektů
  • ... a další

Kolik paradigmat může programovací jazyk podporovat?

Jaké paradigma je nejlepší?

S čím se tak setkáte...

  • OOP je k ničemu a hrozné
  • to... je možná pravda
  • záleží na situaci a projektu
  • OOP je nástroj, který můžete použít a záleží na našem přístupu

Funkcionální programování

Práce

Zkuste ve vašem oblíbeném programovacím jazyce (nebo nalezněte takový, který to podporuje) použít funkcionální programování.

Zjistěte si co jsou to funkce vyššího řádu, lambda funkce, a jak se s nimi pracuje.

Třídy a návrh

Práce

Ve vašem dlouhodobém projektu se zamyslete nad tím, jaké třídy budete potřebovat a jak budou mezi sebou komunikovat.

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/