• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Początki programowania

0 głosów
363 wizyt
pytanie zadane 16 października 2017 w C i C++ przez Utau Użytkownik (890 p.)

Czytam obecnie książkę Praty "Szkoła programowania C++" oraz materiały Pana Mirosława Zelenta. Wrzucam Wam do przeanalizowania kod prymitywnego kalkulatora, który starałam się napisać w sposób obiektowy. Proszę ocenić przejrzystość, oraz optymalizację (jeśli to możliwe)

Są to pytania totalnego laika, ale chciałabym wiedzieć czy dobrze rozumiem podstawy programowania obiektowego. Program ofc. działa.

No i moje kolejne pytanie jest takie czy warto od teraz równolegle zaczać uczyć się Javy i C# ?

Java, C# i C++ to moje ulubione języki programowania. Ogólnie programowanie to moja pasja. Mam pytanie nieco offtopowe - czy z tego da się wyżyć ? Obecnie mam 23 lata. Jestem osobą bez studiów i matury (depresja i tego typu rzeczy, zamierzam się za to wziąć od września nastepnego roku).

 

Przedstawiam Wam moje "wypociny":

(main.h)

#include <iostream>

using namespace std;

class Dane
{
    float a;

public:

    void Take_Number();
    friend float Calculate(Dane m, Dane n, int x);
};

int TakeSwitch(int x);


(action.cpp)

#include<iostream>
#include "main.h"

using namespace std;

void Dane::Take_Number()
{
    cout <<"Podaj liczbe: ";
    cin >> a;
}

float Calculate(Dane m, Dane n, int o)
{
    switch(o)
    {
    case 1:
        return m.a+n.a;
        break;
    case 2:
        return m.a-n.a;
        break;
    case 3:
        return m.a*n.a;
        break;
    case 4:
        return m.a/n.a;
        break;
    }

}

int TakeSwitch(int a)
{
    cout <<"Podaj typ dzialania: "<<endl;
    cout <<"Dodawanie: 1"<<endl;
    cout <<"Odejmowanie: 2"<<endl;
    cout <<"Mnozenie: 3"<<endl;
    cout <<"Dzielenie: 4"<<endl;
    cout <<endl;
    cout <<"Podaj wybor: ";
    cin >> a;

    return a;
}


(main.cpp)

#include <iostream>
#include "main.h"

using namespace std;

int main()
{
    int wybor;

    Dane s1;
    Dane s2;

    //wprowadzenie danych

    s1.Take_Number();
    s2.Take_Number();

    //wybor dzialania

    wybor = TakeSwitch(wybor);

    //obliczenie

    cout <<endl;
    cout <<"WYNIK: "<<Calculate(s1,s2,wybor)<<endl;

    return 0;
}


Proszę nie śmiać się ze mnie. Jestem początkująca w te klocki i sprawdzam czy dobrze rozumuję :p

5 odpowiedzi

+3 głosów
odpowiedź 16 października 2017 przez CenterPL Pasjonat (19,110 p.)
wybrane 16 października 2017 przez Utau
 
Najlepsza

Nie jestem specem od C++, ale odnośnie samej nauki mogę sporo powiedzieć. Jednak zaczynając od kodu:

(Biorę to na logikę, jak wspomniałem, C++ to nie moja bajka i w tym temacie może ktoś mądrzejszy się wypowie)

Main.h <- trzymasz tam klasę, nie przejrzyściej byłoby nazwać plik nazwą klasy?

Nazwy metod i funkcji zaczynamy z małej litery - z wielkiej zaczynamy nazwę klasy, namespace'ów itp

Nie używaj "using namespace std;" bo przy większych programach pogubisz się. Ktoś po to wymyślił przestrzenie nazw, żeby pomagały. fakt, że masz te 5 znaków więcej do napisania, ale co gdy masz dwie funkcje, które nazywają się tak samo, a jednak są z różnych przestrzeni? Rozważ. 

Nazwy zmiennych - "m, n, o" są bardzo wymowne, nie sądzisz? Pewnie musisz zerknąć w kod żeby wiedzieć co to za zmienna i za co odpowiada. To jest błąd, zmienna, a raczej jej nazwa, powinna mówić o sobie jak najwięcej.

Logikę kodu zostawię komuś innemu, ale wydaje się ok :P

Java, C# i C++ to moje ulubione języki programowania.

A programowałeś w Javie i C# skoro wcześniej zadałeś pytanie czy warto ZACZĄĆ się uczyć? Otóż sytuacja wygląda tak - nie ma sensu uczyć się wszystkiego - programista to nie kombajn który zna świetnie 15 języków programowania, wraz z technologiami, które działają dookoła. Wybierz jedną, naucz się jej dobrze i napisz w tym kilka ciekawych projektów, użytecznych co ważne. Nie mówię, żebyś np kontynuował C++, ale nie ciągnij 3 srok za ogon, bo nie zostanie Ci żadna. Biorąc na ten przykład samo C++ - podstawy cpp to mało, możesz się nauczyć Qt, czyli biblioteki do cpp i pisać aplikacje okienkowe, pewnie przyda się jakaś baza danych, sqlite czy coś. 

Java to też nie tylko sama Java, ale wszystkie Springi i inne tego typu frameworki.

No i programowanie to nie tylko język i biblioteki/frameworki do niego. To też wzorce projektowe i inne ciekawostki. 

BTW doucz się gita ;) 

I tak, idzie z tego wyżyć, jeśli jest się w tym dobrym, wcale nie trzeba skończyć studiów informatycznych.

 

komentarz 16 października 2017 przez Utau Użytkownik (890 p.)
Dzięki za rady tylko mała uwaga.

Jestem kobietą :p (użyłeś męskich końcówek)
komentarz 16 października 2017 przez Utau Użytkownik (890 p.)
Co do Javy i C# i ogólnie programowania. Pierwszy raz z programowaniem zetknęłam się w wieku 13 lat. Zaczynałam właśnie od C++ i dlatego ten język najbardziej pokochałam. Potem doszły książki do Javy i C#, więc podstawy tych języków też znam tylko musiałabym sobie je przypomnieć. Potem przyszła depresja i choroba na wiele lat i poszło to w kąt wszystko i teraz wracam znów do swojej pasji :p
komentarz 16 października 2017 przez imklau Nałogowiec (42,340 p.)
dobrze kolega wyżej napisał, wybierz sobie jeden i skup się na nim ;) Ewentualnie w wolnych chwilach raz na jakiś czas dorzuć sobie Javę albo C#, ale moim zdaniem 3 na raz to jednak za dużo ;)

Najlepiej jeszcze zastanów się, w czym chciałabyś działać w przyszłości ;)
Powodzenia!
komentarz 16 października 2017 przez ziemjok Gaduła (4,140 p.)
Nazwy metod i funkcji zaczynamy z małej litery - z wielkiej zaczynamy nazwę klasy, namespace'ów itp

Tu się nie zgodzę, bo to zależy od przyjętej konwencji nazewnictwa

komentarz 16 października 2017 przez CenterPL Pasjonat (19,110 p.)

Jestem kobietą :p (użyłeś męskich końcówek)

Oj, wybacz wobec tego, rozpędziłem się, bo o Twojej płci świadczy tylko jedno słowo w całym poście ;) Nie mniej przechodząc płynnie do wątku - C++ jest bardzo często wybieranym językiem na start tylko, że jest dość trudnym, tj. o wielu rzeczach trzeba myśleć - ma to w rzeczy samej swoje ogromne plusy, o czym świadczy chociażby wydajność programów DOBRZE napisanych w tym języku.

Druga sprawa, że będzie Ci bardzo trudno się wybić akurat w C++, C# i Java są, tak z moich obserwacji rynku wynika, bardziej poszukiwane na rynku pracy, ale chyba to ze względu na popularność programowania pod Web, czyli Java Enterprise i .NET dla C#. 

Co ja bym zrobił na Twoim miejscu - wybrałbym spośród dwóch wyżej wymienionych i szedłbym w to na całość. 

Ja też zaczynałem od C++, w tej chwili moim głównym językiem jest PHP, w którym poruszam się już bardzo płynnie, ale Jave też znam (a składnie to znam chyba z 15 języków :D)

Tu się nie zgodzę, bo to zależy od przyjętej konwencji nazewnictwa

Owszem, prawda, równocześnie w mojej opinii dobrą konwencją jest w ten sposób rozdzielenie składowych klasy od samej klasy, tak jak tu: http://geosoft.no/development/cppstyle.html

+1 głos
odpowiedź 16 października 2017 przez Criss Mędrzec (172,640 p.)
  • Przyjęło się ze plik z funkcją main nazywa się main a cała reszta plików nazywa się tak samo jak definiowana w nich klasa. U ciebie to jest strasznie niejasne i w większym projekcie nie wiedzialbym gdzie czego szukać.
  • Nie używaj deklaracji using namespace w plikach naglowkowych. #include działa na zasadzie prostego przeklejania tekstu dlatego includując plik z taką deklaracją zaczyna ona obowiązywać tez w pliku includującym który z kolei może być includowany przez inne pliki itd.
  • Nazwy zmiennych powinny opisywać jej przeznaczenie.
  • Mieszasz warstwy aplikacji. Dlaczego obsługa inputu jest wewnątrz klasy Dane (częściowo)? Po pierwsze klasa powinna mieć pojedynczą odpowiedzialność, a po drugie - Dane ewidentnie jest pomyślane jako klasa działająca w logice apki a nagle okazuje ze obsługuje tez najwyższą warstwę komunikacji z użytkownikiem. Powinno to wyglądać mniej-więcej tak:
    Dane dane;
    int n{};
    std::cin >> n;
    dane.setNumber(n);

    Tzn. klasa Dane zapewnia działania na liczbie (tutaj pewnie tylko jej ustawianie i zwrócenie trzymane wartości), ale nie powinna sama się komunikować z użytkownikiem.

  • Zamiast funkcji Calculate, powinna yo być klasa. Miałoby to nawet więcej sensu niż klasa Dane.

  • Po co Dane ma pole prywatne skoro specjalnie deklarujesz frienda żeby to ominąć? 

  • Zamiast zagadkowego inta w Calculate  (3 arg.) użyj enumeracji. Wygoogluj enum jeśli nie wiesz o czym mówię. 

0 głosów
odpowiedź 16 października 2017 przez Sheida Użytkownik (950 p.)
Spróbuj zmienić trochę program, bo aktualnie prowadzisz działania na jednej liczbie. Spróbuj dodać do kalkulatora druga liczbę (a może nawet więcej), i rozszerz zakres działań (spróbuj stworzyć funkcje która podnosi do potęgi którą zechce użytkownik). Dodaj też walidacje wprowadzanych danych, aby użytkownik po wpisaniu litery nie zobaczył wysypanego programu.
komentarz 16 października 2017 przez Utau Użytkownik (890 p.)
To chciałam zrobić :> Po prostu uczę się obiektówki od wczoraj dopiero i chciałam sprawdzić czy dobrze rozumuje podstawy i przekształcam prymitywne programiki napisane proceduralnie na programiki napisane obiektowo (sam Zelent to proponował).

Aha i po skompilowaniu programu mozna wykonać działania na 2 liczbach a nie jedną :p (program tworzy 2 obiekty)
komentarz 16 października 2017 przez Sheida Użytkownik (950 p.)
Faktycznie, przeoczyłem :)
0 głosów
odpowiedź 16 października 2017 przez m4sk1n Pasjonat (16,900 p.)
Opanuj jeden język programowania, do tego ewentualnie jakiś język interpretowany, np. Python. Zdobywanie umiejętności zajmie sporo czasu, ale jeśli opanujesz jeden język bardzo dobrze, kolejne będziesz ogarniała dużo szybciej. Przy czym – im bardziej ogarniesz dany język, tym mniej będziesz chciała się uczyć nowego, przynajmniej tak jest u mnie. Kod jest napisany nieźle, choć parę rzeczy trzeba poprawić, abyś nie nauczyła się złych nawyków (spacje dla czytelności, namespace, nazwy funkcji, zmiennych [język i to, co piszesz z małych, a co z dużych], dane których nie modyfikujesz mogą być const itp.). Powodzenia.
0 głosów
odpowiedź 16 października 2017 przez Zero Dyskutant (8,260 p.)
Wydaje mi się, że nie ma sensu robić sobie zamieszania w głowie nauką kilku języków.
Na twoim miejscu wybrałbym Javę lub C# i zdobywał umiejęności potrzebne juniorowi.
Szanowni forumowicze zwrócili uwagę na małą czytelność twojego kodu, to powinno pomóc:
https://kobietydokodu.pl/niezbednik-juniora-dobre-praktyki-dla-poczatkujacego-programisty/
https://sii.pl/blog/solid-dobre-praktyki-programowania/
https://helion.pl/ksiazki/czysty-kod-podrecznik-dobrego-programisty-robert-c-martin,czykov.htm#format/d
Powodzenia :)

Podobne pytania

0 głosów
2 odpowiedzi 304 wizyt
0 głosów
0 odpowiedzi 122 wizyt
pytanie zadane 24 maja 2020 w Python przez graj23x Obywatel (1,400 p.)
0 głosów
1 odpowiedź 345 wizyt
pytanie zadane 30 września 2017 w PHP przez Wonderpol Gaduła (3,430 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

85,698 zapytań

134,499 odpowiedzi

298,514 komentarzy

56,625 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...