Nauka C++ w nowy sposób

31

Cześć wszystkim.
Dziś można powiedzieć, że oficjalnie ruszyłem z kursem.
Zapraszam wszystkich na http://fasadin.4programmers.net/
Śmiało zapraszam do komentowania i krytykowania czy tutaj czy na blogu.
Wszystkie uwagi zostana przedyskutowane i wziete pod uwage :)

2

zamawiam cos w podobnym stylu tylko z c++ -> java :)
podziwiam za checi

2

@Craith Z Javy za drobniutką opłatą podszkoli Cię pewnie @karolinaa :)

3

@fasadin - subdomena zobowiązuje :D Prostota strony jak zwykle u mnie na plus, ale to:

b.png

na samej górze strony wygląda paskudnie i raczej nie powinno się tam znajdować; I jeszcze jedna sprawa - strona nie skaluje się na niższych rozdzielczościach i pojawia się poziomy suwak; Przeprowadziłem śledztwo - patrzę w CSS a tam taki cycek:

body { 
  min-width: 1200px;
}

Rozumiem, że czasy 800x600 już dawno za nami, jednak nie każdy ma monitor na pół ściany;

Co do samego tekstu i jego merytoryczności - nie wnikam, to zweryfikują inni; Natomiast słabo formatujesz tekst i niepotrzebnie indeksujesz nagłówki od 0; A tak to spoko - cytując klasyka (tzn. trolla): "zachęcam do dalszej pracy" :]

PS: Ach, teraz dopiero gdzie indziej doczytałem, że to przerzutka i chyba nici z powyższego... :D

3

Fajna inicjatywa. Nic, tylko podziękować w imieniu wszystkich tych, którzy skorzystają.
Mała uwaga - lepiej chyba by było, żeby zamiast na blogspocie, postawić to nawet na githubpages - kody źródłowe od razu w jednym miejscu i tak dalej : )

0

@furious programming @Wielki Kot
no niestety to tylko redirect. Nie chcialem spedzac duzo czasu nad budowaniem strony w html css (nie jest to moja mocna strona. Nigdy tego nie lubilem)
Wiem, ze formatowanie tekstu jest slabe. Nadal staram sie jakos to poprawic ale ciezko mi to idzie. Jezeli cos wylapiecie jak mozna to usprawnic. Dajcie mi znac :)

1

Hej,
kurs zapowiada się bardzo ciekawie, na pewno będę śledził :). Jedno ale: nie chcę być postrzegany za czepialskiego, ale(a jednak jest drugie :)), mimo że bardzo podobaa mi się wstęp(jestem w trakcie pisania), to zauważyłem zgrzyt. Mianowicie, tak fajnego wstępu nie godzi się kalać stwierdzeniem :__ klasa tworzy obiekty__. Bo później, przy bardziej zaawansowanym etapie, dojdziemy do momentów, o konstruktorach, wzorcach projektowych (np. fabryka) i będzie konsternacja :). Więc klasa jest bardziej formą (o czym zresztą też gdzieś wspomniałeś).

0

@Pszep
zgadzam się. Celowo tak napisałem. Ale widocznie za dużo kontrowersji to przynosi także w piątek to poprawie na bardziej pasującą formę. Dzięki za feedback

1

I jeszcze jedno: 1.4: "W programowaniu to wszystko definiujemy w trakcie tworzenia obiektu lub gdy już istnieje (tak, możemy zmieniać właściwości obiektu nawet gdy już istnieje. Nie ma żadnego problemu z tym!)"

Nie możemy przecież definiować cechy dla obiektu istniejącego(chyba, że np. obiekty są tablicami asocjacyjnymi jak w JS) - oczywiście możemy, tak jak później napisałeś ją zmieniać.

poza tym super :)

0

@Pszep tutaj tez doprecyzuje o co mi chodziło :) Dzieki za feedback

1

Nie możemy przecież definiować cechy dla obiektu istniejącego(chyba, że np. obiekty są tablicami asocjacyjnymi jak w JS) - oczywiście możemy, tak jak później napisałeś ją zmieniać.

W C++ może i nie ale juz w takim pythonie bez problemu ;]

1

We wstępie napisałeś, że w późniejszych rozdziałach będziesz "wyjaśniał szczegóły, które pominąłem lub delikatnie nagiąłem prawdę" - może fajnie by było żebyś takie miejsca (tzn. o których kiedyś opowiesz trochę dokładniej) w jakiś sposób oznaczał (* czy inny kolor czy cuś innego ) ;)

0

myślałem nad tym, ale nie zrobie tego z bardzo proste względu. Czytelnik nie może wątpić w to co czyta bo wtedy będzie się nad tym zastanawiał a te rzeczy które tutaj wymieniłeś (bo nie do końca są prawdą) są na tyle małe i na tyle szczegółowe, ze przyjecie do wiadomosci, ze cos jest troszeczke inaczej, nie powinno byc dla nikogo problemem

5

Ciekawym pomysłem by było, gdybyś dodawał zdania do zrobienia, ale nie typu "Napisz kalkulator", tylko takie zdanie gdzie jest już kawałek kodu, uczyłby się od razu analizy kodu. Na przykład dajesz gotową funkcję main, w której są wykonywane jakieś operacje na liście (dodaj na początek, usuń, dodaj na koniec itp.), a zadaniem uczącego byłoby dopisać resztę kodu (funkcje, klasy/struktury) tak aby działało poprawnie. Odpowiedni podział na pliki .h i .cpp. Może jakiś krótki wstęp do tworzenia makefile itp.

0

Fajnie :) Trzymaj poziom a będzie ok :)

1

GitHub Pages używa jekylla - masz dużo domyślnych templatek, których nie musisz wcale edytować ani babrać się z htmlem, cssem czy frontendem w ogóle.
PIszesz jedynie posta w wyswigu albo markdownie

0

Pisałeś, że HTML i CSS nie jest twoją mocną stroną, jednak fajnie by było stworzyć dobrą stronę. W necie jest mnóstwo generatorów stron do której musisz w sumie jedynie zrobić grafikę i są do tego darmowe, zapłacić musisz jedynie za hosting i domenę, ale nie jest to duży koszt (przynajmniej zazwyczaj) Sam kiedyś robiłem na takiej zasadzie dla kilku klientów strony internetowe. W szybki i prosty sposób robisz stronę która wygląda jak profesjonalna i masz zazwyczaj pakiety gotowych skryptów do dodawania komentarzy itp. tak więc jedynie robisz w PS'ie sobie grafiki. Jak chcesz to podbij na priv podeślę ci link, żeby nie robić zbędnego spamu.

0

Nie mogę napisać w komentarzach(nie mam kont(google, WP itp) na blogu.
Do 1 rozdziału:
Mój przykład:
Klasa nauczyciel:
-obiekt nauczyciel historii(własność), długie włosy(własność):
*uczy (funkcja)
*pyta uczniów (funkcja) <--> uczeń odpowiada(funkcja)
Trzymaj tak dalej!
Pozdrawiam!

0

Wielki Kot
Sprawdzalem na szybko github pages + jekyll i jest troche konfiguracji. Ja ledwo znajduje czas by napisac nowy tekst a jak mialbym jeszcze stawiac kilka godzin strone i pozniej sie opiekowac nia (bo cos nie bedzie dzialac, bo pozniej cos tam) to ten kurs w ogole nie powstanie

@kmaksiu
stworz :) z checia skorzystam. Tak jak napisalem wczesniej, nie mam czasu na bawienie sie html + css. To ma byc kurs, wazne sa tresci, a nie jak wyglada strona. Jezeli ktos chce pomoc w napisaniu czegos wlasnego z checia przyjme taka pomoc, ja sam nie znajde na to czasu po prostu

@planrakee
Nie wiem czy sie uczysz od poczatku i rozwiazujesz zadanie czy jako przyklad, ale jezeli to pierwsze to tak ;) rozwiazales poprawnie

0

Super pomysł, ciekawe podejście, będę śledził i mam andzieje jak najwięcej sie nauczę. Ciśnij z tematem, Powodzenia !

0

Mi nie pasuje opis: czym jest klasa - to co opisales bardziej na fabryke abstrakcyjna wyglada. Do tego niefortunne zdanie:
"Klasa w programowaniu jest rzeczą abstrakcyjną" - jesli klasa jest rzecza abstrakcyjna to czym jest klasa abstrakcyjna?
Poza tym czy to klasa tworzy obiekty? Czy raczej sa tworzone obiekty danej klasy.

7

Klasa w programowaniu to schemat wg, którego tworzone są jej poszczególne egzemplarze czyli obiekty. To tak jak w budownictwie. Jeżeli chcemy zbudować dom to najpierw potrzebujemy utworzyć jego plan. Dopiero kiedy będziemy posiadali plan możemy rozpocząć budowę. Porównując to z programowaniem obiektowym; plan budynku jest klasą, natomiast gotowy budynek jest jej egzemplarzem czyli obiektem. Na podstawie jednego planu można zbudować wiele domów i tak samo jest w programowaniu obiektowym. Na podstawie jednej klasy możliwe jest utworzenie wielu obiektów, których zachowania oraz własności są wewnątrz danej klasy (planu budynku) zdefiniowane.

;)

0

zminiłem ze klasa tworzy obiekty na

Najważniejszą rolą klasy w programowaniu jest to, że daje szablon programiście do tworzenia obiektów. To jest jej zadanie.

co jest dużo lepiej leży koło prawdy, a jest równie proste co poprzednie zdanie

dodałem zdanie grzeska bo jest to świetny przykład oraz poprawilem drobniejsze bledy

postaram sie dzis wrzucic kolejna lekcje

0

nowy post. Jak zawsze mile widziany feedback

5

Konstruktor jest zawsze wywołany gdy obiekt zostaje utworzony

To nie jest prawda. W szczególnym przypadku żaden konstruktor może nie zostać wywołany podczas value initialization.

Jeżeli nie stworzymy żadnego konstruktora dla klasy to ten stworzy się sam (kompilator go wygeneruje)

To nie jest prawda. Jest wiele przypadków, dla których tak się nie stanie. Np. jeżeli klasa będzie miała składnik, który jest referencją (bez inicjalizacji w definicji klasy).

Jeżeli nie stworzymy żadnego destruktora dla klasy to ten stworzy się sam (wygeneruje się)

To nie jest prawda. Jest kilka przypadków, dla których tak się nie stanie. Np. jeżeli którykolwiek składnik nie będzie mieć dostępnego destruktora.

Oczywiście to szczegóły, które starasz się pomijać. To w porządku, ale można po prostu pisać "zazwyczaj stworzy się sam" czy "praktycznie zawsze jest wywoływany (jest jeden, teraz nieistotny, wyjątek)". To powoduje, że nikt nie będzie czuł się oszukany kiedy potem okaże się, że to było uproszczenie.

Póki co wszystkie nasze klasy zawszę będą publiczne.

Nie ma czegoś takiego. Chyba chodziło o klasę z samymi publicznymi składnikami.

Definiujemy szablon (czy jak kto woli robimy plan dla budynku)

Używanie w kursie C++ słowa szablon do czegoś co nie jest szablonem w myśl C++ może spowodować zamieszanie w przyszłości.

Formatowanie kodu jest niespójne i dziwne. Tekst trudno się czyta. Jest dziwnie sformatowany, ma dziwną składnię i interpunkcję. Np:

Konstruktor Definiujemy tak samo nazwę klasy tylko tak samo jak funkcje main z () {}.

Wut?

0

Np wiemy, ze kubek posiada kolor (klasa), ale nie wiemy jaki (taką informacje posiada obiekt)

Nie wiem czy tu jest błąd ale chyba powinno być:
Np wiemy, ze kubek(klasa) posiada kolor (dane czy właściowość), ale nie wiemy jaki (taką informacje posiada obiekt).
Jak się mylę to proszę o wyjaśnienie :).
Składowe klasy w innych językach programowania (np. Python) definiujemy w konstruktorze?

0

Planrakee oczywiscie masz racje. Dzis poprawie.

Nie jestem pewien co do pythona, bo wydaje mi sie ze mozna to robic dynamicznie (czyli nie tylko w konstruktorze). Ale zawolam @Shalom ktory bedzie znal odpowiedz na to pytanie :)

4

@Planrakee python to akurat trochę wyjątek bo tam możesz dynamicznie definiować property obiektów gdzie chcesz ;] Jest taka niepisana konwencja żeby definiować je w __init__ żeby było widać co obiekty danej klasa posiadają, ale nie jest to w żaden sposób wymuszone. Możesz definiować property także w innych metodach a nawet w ogóle poza nimi ;] Mozesz zrobić np.

class A(object):
    pass

#

x = A()
x.y = 1

I nagle nasz obiekt x klasy A ma pole y mimo że inne obiekty tej klasy takiego pola nie mają.

4

Trochę głupio uzupełniać wypowiedzi @Shalom'a o Pythonie. W utworzonym obiekcie można nie tylko dopisać atrybut, można go też usunąć.

class A:
    def __init(self)__:
        self.x = 3
        self.y = 5

a = A()
a.y  #5
del a.y
a.y #AttributeError: A instance has no attribute 'y'
0

Dobry blog czekam na więcej !
W szczególności na tworzenie zbioru obiektów i zarządzenie nim (kolekcje ?)

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1