Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shm 2 #106

Open
wants to merge 25 commits into
base: shm
Choose a base branch
from
Open

Shm 2 #106

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b358851
fix #30
ziobron Jun 11, 2021
c5340c8
fix #84
ziobron Jun 11, 2021
220bf13
fix #88, module3 almost removed
ziobron Jun 11, 2021
44b8e81
Update 09-operators.md
BarTes8 Jun 14, 2021
2f41754
module2
ziobron Jun 23, 2021
d3ca5df
module2 further work
ziobron Jun 23, 2021
43b51d7
module2 finished
ziobron Jun 23, 2021
0b7e6a3
md rename
ziobron Jun 23, 2021
0c2d7b8
Fix number -> amount
ziobron Jun 24, 2021
fb9d392
added getUserInput() to the Laptop class
ziobron Jun 29, 2021
4163401
Update README.md (#89)
BarTes8 Jul 3, 2021
90ee55a
Script return values changed
ziobron Jul 5, 2021
09391a3
completed SHM-Vol.1
Jul 7, 2021
06bb9cc
8 moved map implementation into source file, simplified map class (#12)
Ptysiek Jul 23, 2021
d91324f
6 moved definitions from Fortune.hpp file into Fortune.cpp source fil…
Ptysiek Jul 26, 2021
242ff66
9 moved player definitions into source file (#24)
Ptysiek Jul 26, 2021
e737f34
5 moved Cargo definitions into source file (#23)
Ptysiek Jul 26, 2021
d8b792e
16 created new class: Game (#22)
Ptysiek Jul 26, 2021
97acf13
10 moved ship definitions into source file (#25)
Ptysiek Jul 26, 2021
dd89d0a
removed maxAvailableSpace field from Player class
Jul 26, 2021
f96b5fa
20 create derived classes from class cargo (#26)
Ptysiek Jul 26, 2021
a32c398
14 cs task4 (#27)
Ptysiek Jul 26, 2021
3192262
13 cs task3 (#29)
Ptysiek Jul 26, 2021
77cb21d
21 created new class DryFruit (#30)
Ptysiek Aug 21, 2021
d5c4ee3
7 moved Island class definitions into source file (#31)
Ptysiek Aug 21, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/module1.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
working-directory: shm
run: |
chmod +x check.sh
sudo apt install -y pcregrep
./check.sh CMakeLists.txt
# sudo apt install -y pcregrep
# ./check.sh CMakeLists.txt

# In case of conflict do not remove above jobs. Just add your jobs below and remove this comment :)
4 changes: 2 additions & 2 deletions module1/09-operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public:

```cpp
int main() {
Person adam("Adam", 25)
Person adam("Adam", 25);
++adam;
std::cout << adam.getAge() << '\n'; // prints 26
}
Expand All @@ -58,7 +58,7 @@ T& T::operator +=(const T2& b);

```cpp
Computer& Computer::operator+=(Memory amount) {
ramAmount_ += number;
ramAmount_ += amount;
std::cout << "Ram memory extended\n";
return *this;
}
Expand Down
4 changes: 2 additions & 2 deletions module1/13-project.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ ___

* Każde dostarczone zadanie to 5 punktów
* 15 punktów za dostarczenie wszystkich 8 zadań do 28.06.2021 (poniedziałek) do 23:59
* brak punktów bonusowych za dostarczenie tylko części zadań przed 28.06.
* 8 punktów za pracę w grupie dla każdej osoby z grupy.
* brak punktów bonusowych za dostarczenie tylko części zadań przed 28.06
* 8 punktów za pracę w grupie dla każdej osoby z grupy

___

Expand Down
2 changes: 1 addition & 1 deletion module1/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<h1>Programowanie obiektowe</h1>
<h2>Object-Oriented Programming</h2>
<a href="https://coders.school">
<img width="500" data-src="../coders_school_logo.png" alt="Coders School" class="plain">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>
<h3>Mateusz Adamski</h3>
<h3>Łukasz Ziobroń</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
## Dziedziczenie

<a href="https://coders.school">
<img width="500" data-src="../coders_school_logo.png" alt="Coders School" class="plain">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>

___
Expand Down Expand Up @@ -275,6 +275,8 @@ protected:
class Laptop : public Computer,
public Screen {
Keyboard keyboard_;
public:
void getUserInput();
};

class Tablet : public Computer,
Expand Down
72 changes: 14 additions & 58 deletions module2/presentation_virtual.md → module2/02-virtual.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

# Programowanie obiektowe

## Metody wirtualne, interfejsy, klasy abstrakcyjne
## Metody czysto wirtualne, interfejsy, klasy abstrakcyjne

<a href="https://coders.school">
<img width="500" data-src="../coders_school_logo.png" alt="Coders School" class="plain">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>

___
Expand All @@ -16,9 +16,9 @@ ___
```cpp
class Bird {
public:
size_t getWeight();
size_t getHeight();
size_t getName();
size_t getWeight() const { return weight_; }
size_t getHeight() const { return height_; }
std::string getName() const { return name_; }

// Pure virtual function without implementation
virtual void eat() = 0;
Expand All @@ -32,7 +32,7 @@ protected:
```
<!-- .element: class="fragment fade-in" -->

Metody `eat()` oraz `sleep()` to tzw. metody czysto wirtualne. Świadczy o tym `= 0;`. Oznacza to, że nigdzie nie znajdziemy ich implementacji dla klasy `Bird`. Klasy które dziedziczą po `Bird` będą ją musiały zaimplementować same.
Metody `eat()` oraz `sleep()` to tzw. metody czysto wirtualne (ang. pure virtual functions). Świadczy o tym `= 0;`. Oznacza to, że nigdzie nie znajdziemy ich implementacji dla klasy `Bird`. Klasy które dziedziczą po `Bird` będą ją musiały zaimplementować same.
<!-- .element: class="fragment fade-in" -->

Znaczenie słowa `virtual` na razie przemilczymy. Jedyne co trzeba na teraz wiedzieć, to aby metoda była czysto wirtualna `= 0;` to musi być przed nią słowo `virtual`.
Expand Down Expand Up @@ -71,27 +71,28 @@ ___
## Użycie interfejsów

```cpp
class Penguin : public Bird, public Swimmable {
class Penguin : public Bird,
public Swimmable,
public Soundable {
public:
// Override from Bird
void eat() override;
void sleep() override;

// Override from Swimmable
void swim() override;

// Override from Soundable
void makeSound() override;
};

class Hummingbird : public Bird,
public Flyable,
public Soundable {
public Flyable {
public:
// Override from Bird
void eat() override;
void sleep() override;

// Override from Soundable
void makeSound() override;

// Override from Flyable
void fly() override;
};
Expand Down Expand Up @@ -164,50 +165,5 @@ ___

## Słowo `virtual` i `override`

Co to za słowa? Co one robią? O tym za chwilę ;)
Co to za słowa? Co one robią? O tym w jednym z następnych wideo ;)
<!-- .element: class="fragment fade-in" -->

___

## Q&A

___

## Zadanie 1

Przekształć klasę `Cargo` w interfejs z 4 czysto wirtualnymi metodami.

```cpp
virtual size_t getPrice() const = 0;
virtual std::string getName() const = 0;
virtual size_t getAmount() const = 0;
virtual size_t getBasePrice() const = 0;
```

___

## Zadanie 1 cd.

Utwórz 3 pochodne klasy `Cargo`:

* `Fruit`
* `Alcohol`
* `Item`

Klasa `Fruit` powinna mieć dodatkową zmienną określającą czas do zepsucia oraz `operator--` który będzie odejmował ten czas o 1.
Metoda `getPrice()` powinna redukować cenę odpowiednio wraz z czasem psucia naszego owocu.

Klasa `Alcohol` powinna mieć dodatkową zmienną określającą procentowy udział spirytusu.
Metoda `getPrice()` powinna być proporcjonalnie wyższa w zależności od mocy alkoholu.
Należy ustalić bazową cenę za spirytus 96%.

Klasa `Item` powinna mieć dodatkową zmienną enum określającą rzadkość przedmiotu (common, rare, epic, legendary).
Metoda `getPrice()` powinna być adekwatnie wyliczana od poziomu rzadkości przedmiotu.

___

## Zadanie 2

Wykorzystując wspólną klasę bazową `Cargo` spróbuj przechowywać wszystkie towary w jednym wektorze w klasie `Ship`.

Dodaj funkcję `void load(std::shared_ptr<Cargo> cargo)`, która dodaje towar i (dla chętnych) `void unload(Cargo* cargo)`, która usuwa towar z obiektu klasy `Ship`.
50 changes: 50 additions & 0 deletions module2/03-tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!-- .slide: data-background="#111111" -->

# Programowanie obiektowe

## Zadania

<a href="https://coders.school">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>

___

## Zadanie 5

Przekształć klasę `Cargo` w interfejs z 4 czysto wirtualnymi metodami.

```cpp
virtual size_t getPrice() const = 0;
virtual std::string getName() const = 0;
virtual size_t getAmount() const = 0;
virtual size_t getBasePrice() const = 0;
```

___

## Zadanie 5 cd.

Utwórz 3 pochodne klasy `Cargo`:

* `Fruit`
* `Alcohol`
* `Item`

Klasa `Fruit` powinna mieć dodatkową zmienną określającą czas do zepsucia oraz `operator--` który będzie odejmował ten czas o 1.
Metoda `getPrice()` powinna redukować cenę odpowiednio wraz z czasem psucia naszego owocu.

Klasa `Alcohol` powinna mieć dodatkową zmienną określającą procentowy udział spirytusu.
Metoda `getPrice()` powinna być proporcjonalnie wyższa w zależności od mocy alkoholu.
Należy ustalić bazową cenę za spirytus 96%.

Klasa `Item` powinna mieć dodatkową zmienną enum określającą rzadkość przedmiotu (common, rare, epic, legendary).
Metoda `getPrice()` powinna być adekwatnie wyliczana od poziomu rzadkości przedmiotu.

___

## Zadanie 6

Wykorzystując wspólną klasę bazową `Cargo` spróbuj przechowywać wszystkie towary w jednym wektorze w klasie `Ship`.

Dodaj funkcję `void load(std::shared_ptr<Cargo> cargo)`, która dodaje towar i (dla chętnych) `void unload(Cargo* cargo)`, która usuwa towar z obiektu klasy `Ship`.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
## Polimorfizm

<a href="https://coders.school">
<img width="500" data-src="../coders_school_logo.png" alt="Coders School" class="plain">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>

___
Expand Down Expand Up @@ -92,7 +92,7 @@ public:

class SomeClass : public Interface {
public:
void doSth() override; // there should be an implementation in cpp file
void doSth() override; // there should be an implementation in the cpp file
};

int main() {
Expand All @@ -110,7 +110,7 @@ ___
`override` jest opcjonalne. Jeśli go nie podamy za sygnaturą funkcji klasy pochodnej to metoda z klasy bazowej i tak zostanie nadpisana.
<!-- .element: class="fragment fade-in" -->

Jego użycie jest jednak dobrą praktyką, bo dzięki niemu kompilator sprawdzi czy faktycznie przeciążamy metodą z klasy bazowej i jeśli nie, to program się nie skompiluje.
Jego użycie jest jednak dobrą praktyką, bo dzięki niemu kompilator sprawdzi, czy faktycznie nadpisujemy metodę z klasy bazowej i jeśli nie, to program się nie skompiluje.
<!-- .element: class="fragment fade-in" -->

Bez `override` mogłaby zostać utworzona nowa metoda w klasie pochodnej, która nie nadpisuje niczego z klasy bazowej.
Expand Down Expand Up @@ -230,7 +230,7 @@ ___
```cpp
class Doppler {
public:
virtual sayHello() { std::cout << "I'm Doppler!"; }
virtual void sayHello() { std::cout << "I'm Doppler!"; }
};

class Dwarf : public Doppler {
Expand Down Expand Up @@ -347,21 +347,3 @@ int main() {
std::unique_ptr<Parent> child2 = std::make_unique<Child>();
}
```

___

## Q&A

___

## Zadanie 3

Napisz klasę `DryFruit`, która dziedziczyć będzie po klasie `Fruit`.

Klasa ta powinna nadpisywać metody `getPrice()`, `getName()` oraz `operator--`.

`operator--` powinien odejmować zużycie raz na 10 wywołań.

Metoda `getPrice()` powinna zwracać trzykrotnie większą wartość w porównaniu do ceny bazowej.

Przetestuj wywołania polimorficzne oraz podziel się wnioskami.
23 changes: 23 additions & 0 deletions module2/05-tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!-- .slide: data-background="#111111" -->

# Programowanie obiektowe

## Zadania

<a href="https://coders.school">
<img width="500" src="../coders_school_logo.png" alt="Coders School" class="plain">
</a>

___

## Zadanie 7

Napisz klasę `DryFruit`, która dziedziczyć będzie po klasie `Fruit`.

Klasa ta powinna nadpisywać metody `getPrice()`, `getName()` oraz `operator--`.

`operator--` powinien odejmować zużycie raz na 10 wywołań.

Metoda `getPrice()` powinna zwracać trzykrotnie większą wartość w porównaniu do ceny bazowej.

Przetestuj wywołania polimorficzne oraz podziel się wnioskami w komentarzach :)
Loading