Wpis z mikrobloga

`#include <iostream>
using namespace std;
#include <string>

class zwierze {
public:
string imie;
string gatunek;
string glos;
string wiek;

zwierze(string x, string y, string g, string z) {
imie = x;
gatunek = y;
glos = g;
wiek = z;
}

void print()
{

cout << "Imie: \t" << imie << "\n" << "Gatunek: " << gatunek << "\n" << "Wiek: \t" << wiek<<"\n";
}

void zmienParametry(string noweimie, string nowygatunek,
@ulath: A jaka jest treść tego zadania?

Kod niesformatowany. Do trzymania zmiennych w klasie lepiej użyć enskapsulacji (zrobić zmienne prywatne niedostępne z zewnątrz, a jedynie przez interfejs udostępniony w klasie, mówię o zmiennych typu imie, przy okazji zawsze używaj angielskich nazw)
Zmienne też powinny mieć odpowiedni typ, to że zmienna jest wpisana z konsoli jako cstring nie znaczy, że nie można jej zamienić na inny typ. Chodzi mi o wiek, który
@ulath: Popracuj nad formatowaniem, zwykle edytory mają funkcję automatycznego formatowania. Wyeliminuj duplikujący się kod poprzez użycie funkcji. Podziel kod na dużo mniejsze funkcje - to jest ok, nawet jeśli używasz funkcji tylko w jednym miejscu. Zamiast drabinki ifów "if(choice == "ssak").." możesz użyć mapy. Funkcja zmienParametry do wywalenia, nie wiem po co jej używasz, skoro i tak masz bezpośredni dostęp do zmiennych składowych klasy zwierze. Nie używaj nazw typu a, b,
@Reretos:
1. no właśnie wiek na int muszę zmienić z powrotem, zmieniłem bo jak ktoś wpisywał litery to wywalało program xD (czyli int i jakas pętla sprawdzająca czy wpisana została liczba?)

2. no właśnie tez myślałem ze to za długie wyszło i zastanawiałem się jak zrobić żeby to trochę skroić :)
nie pisz tego (chyba ze naprawdę CI się nudzi) tylko daj znać czego szukać w necie (wirtualne funkcje?)
tresc zadania
nie stwarza warunków Poka-Yoke.


@ulath: w sumie teraz się przyjrzałem i tam nie ma systemu klas, a jest jedna klasa :P

W każdym razie to jest edukacyjnie dobry kod do tego, aby pokazać, jakie problemy może rozwiązać programowanie obiektowe, bo ten kod jest antyprzykładem programowania obiektowego, ale można go poprowadzić/zmienić, aby stał się dobrym kodem obiektowym.
patrolez - >nie stwarza warunków Poka-Yoke.

@ulath: w sumie teraz się przyjrzałem i ...

źródło: Picture1

Pobierz
patrolez - >nie stwarza warunków Poka-Yoke.

@ulath: w sumie teraz się przyjrzałem i ...
W każdym razie to jest edukacyjnie dobry kod do tego, aby pokazać, jakie problemy może rozwiązać programowanie obiektowe,


@patrolez: bardzo jestem ciekaw jakie problemy rzekomo rozwiązuje programowanie obiektowe. Zawsze widziałem tylko jak je stwarzało.
@Krolik: programowanie obiektowe jest oparte o mocny fundament wzorców i powszechnie rozumianych praktyk programistycznych, że ludzie mogą się wypowiadać w sposób lakoniczny w ramach pracy z kodem, a taki komunikat z dużym prawdopodobieństwem zostanie w niemalże jednoznaczny sposób zrozumiany przez niezależnych programistów, np. via nazwy wzorców lub via UML.

Programowanie obiektowe również bardzo mocno nawiązuje koncepcjami i abstrakcjami do naturalnych języków, co umożliwia w dość przystępny sposób przenosić pomysły osób niebędącymi
@Krolik: a to, że w pracy w takich obostrzeniach programowania obiektowego, koszt redesignu jest duży, to inna para kaloszy, w których albo zawalił architekt, albo po prostu nie było takiej możliwości, aby przewidzieć wystąpienie niejako zjawiska emergentnego w późniejszym czasie, w którym np. "prawie A + prawie B * 3
+ nowe G = super C".
@patrolez: Marketingowy bełkot. Dużo słów, mało konkretów.

UML okazał się porażką, której nikt nie używa, poza studentami do pisania zaliczeń.

Wzorce nie są rzeczą unikatową dla programowania obiektowego, znano je wcześniej i są powszechne we wszystkich paradygmatach. Pewne wzorce obiektowe są obejściami ułomności języków obiektowych takich jak Java - przykładowo (anty)wzorzec singleton (obejście na brak możliwości reprezentacji stanu globalnego) czy command (obejście na brak traktowania funkcji jak wartości).

Modelowanie kodu w
koszt redesignu jest duży, to inna para kaloszy,


@patrolez: Zmiany wymagań są powszechne. Kod należy pisać tak aby łatwo było go zrozumieć i łatwo można było go zmienić. OOP to zwykle utrudnia, bo próbuje optymalizować nie to co trzeba - tzn. dąży do ułatwienia pisania nowego kodu kosztem utrudnienia zmian kodu istniejącego. Ale to ułatwienie pisania nowego kodu działa tylko jeśli dobrze przewidziano kierunek zmian, a to prawie nigdy się nie
Marketingowy bełkot. Dużo słów, mało konkretów.


@Krolik: gdybym miał pisać konkrety, to musiałbym napisać książkę, więc chciałem przedstawić esencję.

UML okazał się porażką, której nikt nie używa, poza studentami do pisania zaliczeń.


UML jako robótki ręczne owszem, ale nie jako koncepcja "do odczytu", gdzie np. narzędzia wizualizują ci kod, czy jako notacja pracy z whiteboardem w ramach brain-stormingu, którego oczywiście indywidualiści i ludzie praktykujący ROCKSTAR/HYPE DRIVEN DEVELOPMENT będą uważać jako proces
Nie utrudniają, gdy ma się dobre IDE, a


@patrolez: jeśli do czytania kodu potrzebne jest dobre IDE to znaczy że utrudniają, a IDE tylko próbuje ten problem z lepszym bądź gorszym skutkiem naprawi

jako notacja pracy z whiteboardem w ramach brain-stormingu,


Wiele razy brałem udział w dyskusjach dotyczących kodu i jedyna notacja jaka była powszechnie stosowana to prostokąty (ewentualnie owale), strzałki i tekst. Nie spotkałem nikogo kto by używał UML. Zresztą
@ly000 @Reretos: dzięki Mireczki zacząłem pisać na nowo dziś w robocie ale dopiero zacząłem , już trochę lepiej i zaczynam cokolwiek rozumieć ;)
tak się zastanawiam jeszcze a czy te zwierzęta (obiekty) robione creatorem można jakoś wrzucić w table i później np. sortować i wywoływać jakaś mala pętlą zamiast pisać osobno ify czy swiche dla kazdego z osobna?

czy najprościej zrobić jedna klase zwierzęta i później podklasy dziedziczne koty psy itp?
@ulath: Możesz się już zainteresować czym są słowniki w programowaniu. To takie struktury, które służą do szybkiego wyszukiwania obiektów. Szybszego niż wkładanie obiektów do tablicy i sortowanie jej. Takie struktury w C++ noszą nazwę set,unorderedset, map, unorderedmap. Wtedy po prostu przy tworzeniu obiektu wkładasz do takiej struktury, a w odpowiednim momencie wyciągasz z niej, jeśli klucz istnieje. Być może uda ci się to zaimplementować