Tworzenie obiektu klasy

0

Witam,

Uczę się programowania obiektowego i mam pytanie.
Jeżeli w danej klasie "Przypisania" pisze kilka metod np.:
-metoda Liczby która przypisuje zmiennej liczba wartość np. liczba=10;
-metoda Cyfry która robi coś innego.

Następnie w innej klasie chcę wywołać metodę Liczba. Wówczas tworzę obiekt tej klasy i ją wywołuję:

Przypisania cos=new Przypisania();
cos.Liczba();

Metoda Liczby została wykonana i zmiennej liczba przypisano wartość 10.

Następnie chcę wywołać inną metodę z klasy Liczby (metodę Cyfry). Aby móc to zrobić z innej klasy znów muszę utworzyć obiekt klasy Liczby:

Przypisania cos=new Przypisania();
cos.Cyfry();

Jednak w tym wypadku tworzony jest nowy obiekt klasy i zerowana jest wartość zmiennej liczba.
Jak to obejść? Czy gdzieś w kodzie klas tworzy się raz obiekt innej klasy i potem do niego odnosi? Ale gdzie?

Wiem, że pewnie pytanie jest banalne dla programistów i możecie odesłać mnie do książek.
jednak życie zmusiło mnie to szybkiego napisania programu i uczę się programowania w trakcie rozwiązywania konkretnych problemów.
Będę wdzięczny za odpowiedź.
Kudlatyk

0

Kup sobie książkę. Z tego typu pytaniami od napisania programu dzieli cię jeszcze 1000 tego typu wątków na forum.

Jak to obejść? Czy gdzieś w kodzie klas tworzy się raz obiekt innej klasy i potem do niego odnosi? Ale gdzie?

Tak, są to pola klas. W swojej pierwotnej klasie utworzyłeś pole typu int, możesz w tej drugiej utworzyć pole o typie swojej klasy.

0

Tak, są to pola klas. W swojej pierwotnej klasie utworzyłeś pole typu int, możesz w tej drugiej utworzyć pole o typie swojej klasy.</quote>

Tak też myślałem. Jednak jeżeli jako pole klasy pierwszej wpisze:

Liczby cos=new Liczby();

to program niby się kompiluje bez błędów ale nie startuje...
Dodam, że klasa w której dodaje powyższy kod to clasa Form1 jeżeli ma to jakieś znaczenia...

OK. Wystarczyło zadeklarować zmienną klasy Przypisanie jako static i to rozwiązało sprawę.
Myślę, że dla takich początkujących programistów taka informacja byłaby bardziej przydatna niż od razu
odsyłanie do książek. Nie mniej jednak dziękuję poprzednikom za poświęcony czas i post.
Pozdro

0
kudlatyk napisał(a)

Wystarczyło zadeklarować zmienną klasy Przypisanie jako static ...

Tak, początkujący uwielbiają static, przecież to rozwiązuje tyle problemów, prawda? ...
Skorzystaj lepiej z porady kolegi i przeczytaj jakiś wstęp do programowania.

0

Tak, początkujący uwielbiają static, przecież to rozwiązuje tyle problemów, prawda? ...
Skorzystaj lepiej z porady kolegi i przeczytaj jakiś wstęp do programowania.

Koledzy Forumowicze,
Zgadzam się z Wami, że trzeba iść po kolei od podstaw. Niestety jak już pisałem nie mogę sobie aktualnie na to pozwolić ze względu
na czas, którego nie mam. Nie mniej jednak jeżeli któryś w Was odeśle mnie dokładnie do danego hasła lub rozdziału związanego ze
wspomnianym przeze mnie problemem to bardzo chętnie się dokształcę. Nauka nie boli - wiem...
Pozdrawiam
Kudlatyk

0

Pola klas.

0
Rev napisał(a)

Pola klas.

Wstępnie już o tym czytałem, ale widocznie zbyt mało...
Dzięki za podpowiedź i pomoc...
Kudlatyk

0

Niestety jak już pisałem nie mogę sobie aktualnie na to pozwolić ze względu na czas, którego nie mam.

Nie obraź się, ale chyba nie odkryję Ameryki, gdy napiszę, że nie potrafiąc programować programu nie napiszesz. A brak u ciebie znajomości zupełnych podstaw, także droga jest jeszcze bardzo długa. Radzę się zaopatrzyć w jakąś dobrą książkę i na spokojnie ją sobie przeanalizować, pisać bardzo proste programy w trakcie czytania i może po jakiś 20 godzinach nauki coś z tego będzie.
Jeżeli potrzebujesz program "na teraz" to zwyczajnie za niego zapłać, jest na forum dział "praca" i jestem pewien, że wiele osób będzie chciało pomóc.

1
kudlatyk napisał(a)

OK. Wystarczyło zadeklarować zmienną klasy Przypisanie jako static i to rozwiązało sprawę.
Myślę, że dla takich początkujących programistów taka informacja byłaby bardziej przydatna niż od razu
odsyłanie do książek.

Taka porada byłaby niefachowa, a wręcz debilna. Jeśli chcesz debilnych porad, idź na forum debili, a nie na forum fachowców.

Nie rozumiem, czemu ludzie, którzy "nie mają czasu" biorą się za coś tak mało finezyjnego i nudnego jak programowanie. Ja, gdybym "nie miał czasu" się czegoś uczyć, to byłoby to latanie na Marsa. Jeśli już nie mieć czasu, to na coś spektakularnego, a nie coś, czego nikt nigdy nie doceni.
W CV też lepiej wygląda misja na Marsa, która rozbija się po 5 metrach lotu niż kod marnej jakości, w którym wszystko jest static.

0

Oczywiście nie obrażam się :)

Jak już pisałem rozumiem porady dotyczące pracy u podstaw i odsyłania do książki. Sam jestem młodym nauczycielem akademickim, ale niestety nie na informatyce (choć kierunek też inżynierski). Za dużo czasu poświęciłem na stronę matematyczną i algorytm metody i muszę nadganiać z nauką programowania. Jest mi to potrzebne do mojej
pracy naukowej. Nie mniej jednak (mam nadzieję, że nikogo z Was nie obrażę) niektórzy z Forumowiczów mają już chyba dużą wiedzę i zachowują się moi starsi koledzy z uczelni.
Łatwiej im przychodzi narzekanie na studenta, prowadzenie długich wywodów i tracenie na nie czasu niż poświęcenie trochę czasu delikwentowi, wytłumaczenie problemu, przybliżenie możliwych rozwiązań (ale nie chodzi o dawanie gotowych rozwiązań) lub naprowadzenie na właściwy tor...
Czy to idealizm? A może racjonalizm. Moja może nie długa, ale jednak praktyka pokazuje, że pytający student to dobry student. Trzeba go zatem docenić i poświęcić mu chwile.
"Gamonie" siedzą cicho i liczą że się uda. Dlatego na moich nawet najgłupsze pytanie jest szanowane i pozwala na wskazanie studentowi kierunku...
A o polach klas poczytam głębiej :) Bo aktualna moja wiedza - pola to zmienne deklarowane w klasach a nie w metodach - w ogóle nie rozwiązuje wspomnianego na początku problemu.

Pozdrawiam bo sam zaczynam filozofować
Kudlatyk

0

To ja się zmiłuję:

W przypadku, jak poniżej, widzisz, dlaczego czasami warto tworzyć różne instancje klas:

class KlasaA {
  private int wynik;
  private int mnoznik;
  public KlasaA(int mnoznik_param) {
     this.mnoznik = mnoznik_param;
  }

  public void pomnoz(int liczba) {
    this.wynik = mnoznik * liczba;
  }

  public int zwrocWynik() {
    return wynik;
  }
}

//....

KlasaA pierwsza = KlasaA(5);
pierwsza.pomnoz(100);
int wyn = pierwsza.zwrocWynik(); // 500
KlasaA druga = KlasaB(88);
druga.pomnoz(100);
wyn = druga.zwrocWynik(); // 8800

Jezeli mamy inna klase, ktora potrzebuje korzystac z metod klasy KlasaA, to wystarczy jej obiekt przekazywac w parametrze (metody, konstruktora, itp.):

KlasaA obiektKlasyA = new KlasaA(3);
KlasaB obiektKlasyB = new KlasaB(obiektKlasyA, 7);  // to "7" to inny argument konstruktora
obiektKlasyB.wykonajMnozenieNaKlasieA();
/*
czyli:
 objA.pomnoz(jaka_liczba); // objA to pole w klasie KlasaB bedacy typu KlasaA, jaka_liczba ma wartosc przekazana w konstruktorze obiektu obiektKlasyB (czyli 7)
*/
int wynik = obiektKlasyB.wynik(); // zwraca objA.zwrocWynik(); -> 3*7 = 21

Jak bedziesz mial wiecej pytan, to powiedz ;)

0
kudlatyk napisał(a)

Bo aktualna moja wiedza - pola to zmienne deklarowane w klasach a nie w metodach - w ogóle nie rozwiązuje wspomnianego na początku problemu.

No właśnie, aktualnie chcesz napisać powieść, a nie znasz alfabetu... A my możemy Ci pomóc układać niektóre zdania, ale nie uczyć liter po kolei - od tego są kursy, książki, itp.

0

Programowanie obiektowe nie wystarczy znać. Trzeba je rozumieć. Jeden czy dwa przykłady na forum to moim zdaniem za mało

0

Dziękuję...

Kudlatyk

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