• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

OP - Objektove programovanie

Started by pepco, 23.02.2008, 02:04:57

« predchdzajce - alie »

Agamemnon

v rámci akejkoľvek metódy... môže byť aj v rámci Main()...
All code is crap.

42

Agamemnon

ako... kľudne môžeš mať také veci ako napr.:
- v 1 objekt vytvoríš iný objekt
- objekt prevezme referenciu na iný objekt ako parameter metódy (konštruktora) a kľudne ho používa
- v objekte je komplet výpočet

ono... kompletné vykonávanie programu by malo (v ideálnom prípade) byť v objektoch a metóda Main() je viac-menej len na inicializáciu :)

ak sa mi podarí vymyslieť nejaký easy ukážkový program, tak ho tu hodím... pravdepodobne skúsim modifikovať trochu mirekov obľúbený výťah tak, aby tu sedel, a mohol som na ňom popísať tieto veci... snáď sa mi to podarí urobiť tak, aby to nebolo veľmi umelé... :)
All code is crap.

42

TradeMark

Ufff diky Agamemnon ...veeelka pomoc... zacinam sa do toho nejako dostavat ;) imho ten ukazkovy program by fakt pomohol, ok idem kodit, este raz dik ;)
Pičoch jest veľo, ale nalivačoch malo!

Agamemnon

ok, takže pokus o ukázkový program - snažil som sa ho komentovať čo najviac, snáď je to pochopiteľné... ak nie, tak sa pýtajte...
lepšie to popísať nedokážem, moje pedagogicke schopnosti boli vždy dosť biedne...
- snažil som sa ukázať vytvorenie objektov
- krížové volanie objektov (vodič nastupuje do traktora, získame meno vodiča traktora)
- vytvorenie objektu v inej metóde ako je Main() - narodenie potomka pre objekt typu Clovek
- ukážku ako sa môžu rôzne správať 2 objekty 1 typu - ako majú iné hodnoty - podobne ako napr. pre dátový typ int, string ap.
- ukážku, že sa dá použiť if, for, ai. v akejkoľvek metóde (dokonca aj v iných členoch triedy, ale to neskôr)



using System;

namespace Traktor {
   public class Program {

      /**
       * metoda Main() - vola sa len raz v programe - automaticky sa spusta pri starte programu
       */
      public static void Main() {
         /**
          * vytvorime objekt typu clovek
          * nastavime mu parametre
          */
         Clovek jano = new Clovek("jano", 45);
         
         /**
          * teraz vytvorime viacero traktorov
          * pre predstavu kazdy traktor je rovnaky (seriova vyroba) - len maju inu farbu
          */
         Traktor cervenyTraktor = new Traktor("cerveny");
         Traktor modryTraktor = new Traktor("modry");

         /**
          * teraz jano nastupi na cerveny traktor
          */
         jano.NastupDoTraktora(cervenyTraktor);
         // v metode NastupDoTraktora je pouzity keyword this - to znamena, ze sa tam pouzije konkretny objekt, pre ktory je metoda volana - v nasom pripade je to objekt "jano"

         /**
          * nechame si vypisat, kto je vodicom ktoreho traktora
          */
         Console.WriteLine("vodicom cerveneho traktora je: " + cervenyTraktor.MenoVodica());
         Console.WriteLine("vodicom modreho traktora je: " + modryTraktor.MenoVodica());

         /**
          * a teraz sa obe traktory pokusia prejst 5km.
          */
         cervenyTraktor.Prejdi(5);
         modryTraktor.Prejdi(5);

         /**
          * a este ukazka vytvorenia objektu v inej metode ako je Main()
          */
         Clovek decko = jano.NarodeniePotomka("jozo");
         Console.WriteLine("potomok sa vola: " + decko.Meno());

         // caka na stlacenie klavesy pred ukoncenim
         Console.ReadKey();
      }

   }

   /**
    * trieda clovek drzi info a sposob spravania sa cloveka
    */
   public class Clovek {
      string meno;
      int vek;

      /**
       * konstruktor - da sa predstavit ako zaregistrovanie cloveka do nejakej databazy
       * ma 2 parametre - meno a vek
       */
      public Clovek(string meno, int vek) {
         // this znamena, ze ide o objekt, s ktorym pracujeme - tj. ktoreho konkretne sa volanie danej metody tyka
         this.meno = meno;
         this.vek = vek;
      }

      /**
       * tento clovek nastupi do traktora, ktory prevezme ako parameter
       */
      public void NastupDoTraktora(Traktor trak) {
         trak.NastavVodica(this);
      }

      /**
       * zistenie mena cloveka
       */
      public string Meno() {
         return this.meno;
      }

      /**
       * clovek ma potomka - ukazka, ze je mozne vytvorit objekt aj v inom objekte, ako je hlavny - tj. v inej metode ako je Main()
       * samozrejme, potomok ma meno, a vek 0
       */
      public Clovek NarodeniePotomka(string meno) {
         Clovek potomok = new Clovek(meno, 0);
         return potomok;
      }
   }

   /**
    * trieda traktor zase ma info o traktore a o tom ako sa sprava on
    */
   public class Traktor {
      string farba;
      Clovek vodic;

      /**
       * konstruktor - da sa to predstavit si ako napr. vyrobenie traktora v tovarni
       * v principe vieme, ze vsetky traktory su rovnake (preto kazdy traktor bude instanciou tejto triedy)
       * lisia sa len vo farbe - tu nastavime "pri vyrobe" - preberie sa ako parameter
       * po vyjdeni z tovarne traktor je logicky bez vodica
       */
      public Traktor(string farba) {
         this.farba = farba;
         this.vodic = null;
      }

      /**
       * nejaky clovek nastupil do traktora a stal sa jeho vodicom - konkretne, ktory clovek to bol, preberieme ako parameter
       */
      public void NastavVodica(Clovek vodic) {
         this.vodic = vodic;
      }

      /**
       * chceme zistit, kto je vodicom tohto traktora
       */
      public string MenoVodica() {
         if (this.vodic == null)
            return "tento traktor zatial nema vodica";

         return this.vodic.Meno();
      }

      /**
       * traktor ide ku nejakemu cielu
       * parametrom udame ako daleko je ciel
       */
      public void Prejdi(int vzdialenost) {
         if (this.vodic == null) {
            Console.WriteLine("traktor nema vodica - bez vodica sa nemoze hybat.");
            return;
         }

         // cyklus - uplne klasicke pouzitie
         for (int i = 0; i < vzdialenost; i++) {
            Console.WriteLine("traktor zatial presiel vzdialenost " + i + " km.");
         }

         Console.WriteLine("traktor je v cieli.");
      }
   }
}



odporúčam skopírovať do nejakého editora, kde budete mať syntax highlighting :)
a ideálne si to aj vyskúšať (napísal som to cez MS Visual C# 2008 Express Ed.) - s kompilovaním by nemal byť problém
All code is crap.

42

kOsTi

super... je to celkom pekne popisane... thx ;)
:trestac:

TradeMark

Quote from: Agamemnon on  26.02.2008, 01:09:23
ja mám Q:
má niekto z vás cvika v en skupine?

Ja mam ... dneska sme mali od ...ufff 10:50 - 12:20 (s Biňasom). Inac tie dnesne cvika boli vyborne - fajne, prakticke, konecne som pochopil zaklady a jak to funguje a aj som cosi nakodil co konecne funguje :D.
Pičoch jest veľo, ale nalivačoch malo!

TradeMark

Quote from: Agamemnon on  26.02.2008, 02:43:45
však ja sa tam ešte ukážem možno :)

bude zverejnené riešenie potom... ale to už závisí na mirekovi, že kedy...

A ozaj na konci ste tam spominali cosi so zadaniami ... uz mate dohodnute ze ake budu? Na prvom cviku nam jemne naznacil ze to mozu byt napr. plugin do winampu alebo nieco take.
Pičoch jest veľo, ale nalivačoch malo!

Agamemnon

ja s určovaním toho, aké budú zadania, nemám nič :) plánovali, že budú pluginy do rôznych softvérov (to je koniec-koncov aj na tom wiki, kde bolo to zadanie tej dnešnej úlohy na cviku - moodle.fei.tuke.sk/wiki/index.php/Objektové_programovanie - úplne naspodku je zoznam zadaní)...
ale podľa toho, čo tu ywetka písala pred pár dňami, a aj čo mirek hovoril, aj dnes, tak to ešte nie je isté...
All code is crap.

42

Martin18

v tomto priklade:
//----------------------------------------------
using System;
class Kalkulacka
{
     public int NaDruhu(int x)
    {
         int vysledok = x * x;
        return vysledok;
    }
}
//----------------------------------------------
class MainClass
{
    public static void Main(string[] args)
   {
       Kalkulacka k1 = new Kalkulacka();
       int temp = k1.NaDruhu(5);
      Console.WriteLine(temp);
    }
} //_==_
//----------------------------------------------

musi tam byt Kalkulacka k1 = new Kalkulacka(); ??
nesci iba Kalkulacka k1;

Martin18

je Kalkulacka() implicitne vytvoreny konstruktor?

Ing. nemtom

brix will be shat

Agamemnon

nemton: lol :-P

martin:
Kalkulacka k1;
- to máš ako keby si urobil int a; - tiež tam nemáš hodnotu a nvš to použiť vo výpočte... proste to je len zaregistrovaný názov premennej...

to "= new Kalkulacka()" priradí premennej konkrétnu hodnotu
All code is crap.

42

Martin18


Hero

mam taku otazku:
ako mam implementovat to, ze trieda Captain ma mat povinný atribút name a nepovinný atribút level určujúci skúsenosť kapitána? Nejak cez pretazene konstruktory?  Alebo ako?

kOsTi

#64
jo urobis dva konstruktory... jeden bez a druhy s levelom:

public Captain(string name)
        {
            this.name = name;
        }
public Captain(string name, int level)
        {
            this.name = name;
            this.level = level;
        }
:trestac:

ywetka

Quote from: kOsTi on  28.02.2008, 23:03:29
jo urobis dva konstruktory... jeden bez a druhy s levelom:

public Captain(string name)
        {
            this.name = name;
        }
public Captain(string name, int level)
        {
            this.name = name;
            this.level = level;
        }

no som rada, ze aspon par dobrych a snazivych studentov mam na tom cviku, lebo dnes mi parkrat az rozum zastal, ked som videla, ako vselijak je mozne proste nechapat a nevediet pouzivat zakladne principy :) :thumbsup:
~~Was mich nicht umbringt, macht mich stärker.~~
При́п'ять, мы никогда не будем забывать Вас.

kOsTi

heh ale na moju pisomku radsej ani nepozeraj... som tam take kktiny porobil ze sam neviem jak :D
:trestac:

puq

kosti nevyjednavaj :P :P si sa mal ucit :P

ywetka

Quote from: kOsTi on  28.02.2008, 23:09:34
heh ale na moju pisomku radsej ani nepozeraj... som tam take kktiny porobil ze sam neviem jak :D

tak kedze to bola uvodna pisomka, tak sa s tym pocita. sak co ty vies, mozno dostanete body namiesto pisomky za to, ze ste ako jedini dokoncili tie lodicky  bk
~~Was mich nicht umbringt, macht mich stärker.~~
При́п'ять, мы никогда не будем забывать Вас.

JCube

nj ved najlepsie sa naucim na prikladoch... :) btw budu aj tazsie veci? :)
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

Agamemnon

#70
hej... bude sa robiť sw na rozpoznávanie reči niekde v polke semestra... ;)
All code is crap.

42

buhehe

yes.....uz som sa na to tesil  ;)

ywetka

no jasne, mali by byt aj narocnejsie veci... ale ved som ti to uz hovorila, my sa musime prisposobovat zial priemeru, az podpriemeru. ved si videl sam, 90 percent skupiny neboli schopni urobit ani ten elementarny prikladik s Osobou do konca cvika... a tak je to aj na inych cvikach, co som pocula a vlastne aj videla na vlastne oci... niekde nestihli poriadne ani objekty prebrat :ohmigod:
proste, aj keby sme chceli, "prilis" rychlo nemozeme ist, lebo studenti radi repcu a stazuju sa na uplne vsetko, ale videl si, kolko ludi bolo na cviku pripravenych a kolko z nich malo zaujem to dokoncit samostatne   :emot-rolleyes: na tento faktor vsak potom neskor pri svojich ponosoch akosi velmi lahko zabudaju :)
~~Was mich nicht umbringt, macht mich stärker.~~
При́п'ять, мы никогда не будем забывать Вас.

JCube

ako osobne ti nezavidim...ja mat taku skupinu tak ich pozabijam... :) ale fakt trochu to mrzelo aj mna ze su studenti taki...do chuti a nalady to moc neprida..
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

Havran

hej kde zozeniem daco na C#, bo MS VIsual Studio mi neide nainstalvoat bo nemam nainstalovane dajake IIS a Front Page extencions a nemozem doinstalovat bo mi pise ze nevie citat z imagu co mam ( WTF ?), takze dajake ine prostredie na to poznate ?
Achievement of your happiness is the only moral purpose of your life.