Kompaktné spracovanie viacerých objektov s rovnakými vlastnosťami - Ďalšie problémy -

Existuje 6. Odpovede v tejto téme. Posledný príspevok (13. júla 2013, 14:11) je od mocede.

kompaktné

mocede

Registrované: 7. júla 2013

Chcel by som vytvoriť malý program, ktorý sa v zásade chová takto:

Povedzme, že mám banán, melón, jablko a jahodu.

Všetky majú rovnaké, ale špecifické vlastnosti: hmotnosť, obsah cukru a kalórie.

Teraz chcem automaticky vypočítať celkovú hmotnosť, celkový obsah cukru a celkové kalórie, ak mám 5 banánov, 3 melóny a 2 jablká. Počet plodov závisí od vstupu používateľa.

Najprv musím niekde definovať vlastnosti. V C ++ som to väčšinou outsourcoval ako jednoduchú funkciu v extra súbore, kde boli urobené iba také definície. Vďaka tomu bol skutočný zdrojový kód jasný a ľahší na údržbu.

Ako to môžem implementovať vo VB? Myslím si, že riešenie je dosť jednoduché, ale myslím si, že je to trochu na tube, najmä preto, že v mojom praktickom príklade mám asi 30 „plodov“, každý s 10 rovnakými, ale špecifickými vlastnosťami.

Vopred ďakujem “

RodFromNemecko

Registrované: 30. septembra 2010

Zdrojový kód VB.NET

  1. Pre každé ovocie v zozname myObstList
  2. „urob niečo s ovocím
  3. Ďalšie

mocede

Registrované: 7. júla 2013

Ďakujem za odpoveď a za správnu slovnú zásobu!

Opäť pre mňa, aby som zopakoval, či som správne pochopil vaše tvrdenie:

V ponuke idem hore „Pridať triedu projektu.“ a vytvorte novú (základnú) triedu s názvom „Frucht.vb“.

Tam vytvorím všeobecné vlastnosti:

Zdrojový kód VB.NET

  1. Verejná trieda základná trieda_ ovocie
  2. Tlmená hmotnosť ako celé číslo
  3. Dimujte obsah cukru ako celé číslo
  4. Dim kalórie ako celé číslo
  5. Koniec triedy

V novej triede(?) v súbore extra triedy(?) Teraz rozložím ovocie s vašimi konkrétnymi atribútmi:

Zdrojový kód VB.NET

  1. Verejná trieda abglKlasse_apfel
  2. Tlmená hmotnosť ako celé číslo = 50
  3. Dimujte obsah cukru ako celé číslo = 100
  4. Dim kalórie ako celé číslo = 200
  5. Koniec triedy

Správne?

Ako to myslí lest? Pokiaľ viem, predstavuje to zadaný zoznam objektov (= moji ľudia?!), Ku ktorým mám prístup prostredníctvom indexu.

Zatiaľ úplne nerozumiem tomu, ako môžem povedať, že s 3 jahodami a 4 melónmi môj program spracuje aj 3x váhu jahody (a všetky ďalšie atribúty) a 4x hmotnosť vrátane všetkých ďalších atribútov melónu.

Myslím si, že tu mám problém s porozumením. Som zmätený.: wacko: wacko: wacko:

Tento príspevok bol už raz upravený, naposledy používateľom „mocede“ (13. júla 2013, 12:29 hod.)

Správne, najskôr potrebujete základnú triedu. Táto trieda obsahuje všetky vlastnosti, ktoré zdieľajú všetky druhy ovocia.

Zdrojový kód VB.NET

  1. Verejné ovocie triedy MustInherit
  2. Verejná váha ako celé číslo
  3. Verejný obsah cukru ako celé číslo
  4. Verejné kalórie ako celé číslo
  5. Koniec triedy

Pre každé jednotlivé ovocie potom vytvoríte samostatnú triedu, ktorá zdedí vlastnosti a metódy triedy ovocia. Nová metóda sa volá pri vytváraní objektu. V metóde potom nastavíme zodpovedajúce hodnoty pre ovocie.

Zdrojový kód VB.NET

  1. Verejné jablko
  2. Zdedí ovocie
  3. Verejný príspevok nový ()
  4. Hmotnosť = 50
  5. Cukor = 100
  6. Kalórie = 120
  7. Koniec Sub
  8. Koniec triedy


Teraz si urobme zoznam všetkých druhov ovocia a prejdime ním.

Zdrojový kód VB.NET

  1. „Vytvoriť zoznam typu„ Ovocie “
  2. Dim FruchtListe ako nový zoznam (Of Frucht)
  3. 'Pridajte jablko do zoznamu
  4. FruchtListe.Add (nové Apple)
  5. „Prejdite zoznamom
  6. Pre každé CurrentFruit ako ovocie v zozname FruitList
  7. Messagebox.Show („Ovocie má“ & CurrentFruit.Calories & „Kalórie“)
  8. Ďalšie

nafets3646

Reg ([Ee] x) Užitočné hlasy 276 príspevkov 2 654 bodov za pomoc 276 Pohlavie Muž Použité programovacie jazyky VB.NET, C # Bývalí používateľskí mená nafets3646

Zdrojový kód VB.NET

  1. Formulár pre verejnú triedu 1
  2. Súkromné ​​sub Button1_Click (odosielateľ ako objekt, e ako EventArgs) narába s Button1.Click
  3. Dim MeinKühlridge ako nový zoznam (spoločnosti Frucht) 'Vaša chladnička
  4. MyCridge.Add (nové jablko) „Do chladničky sa pridá jablko
  5. MeinFridge.Add (nový banán) 'A tiež banán
  6. „Teraz musíš pridať mango, ale keďže si ho obvykle nekúpiš, nemáš na to žiadnu triedu.
  7. „Poďme si teda pripraviť ovocie s datlami pre mango
  8. MyCridge.Add (nový Frucht s)
  9. Pre každú FruchtImCridge ako Frucht In MeinCridge „Teraz prechádzame každým ovocím v chladničke a poskytujeme jeho údaje
  10. MessageBox.Show (String. Format ("Popis:; Váha:; Obsah cukru:; Kalórie:", _
  11. Ovocie v chladničke. Popis, _
  12. Ovocie v chladničke. Hmotnosť, _
  13. Ovocie v chladničke. Obsah cukru _
  14. Ovocie v chladničke. Kalórie))
  15. Ďalšie
  16. Koniec Sub
  17. Koniec triedy
  18. Verejné ovocie
  19. Označenie verejného majetku ako reťazec
  20. Váha verejného majetku dvojnásobná
  21. Cukorný obsah vo verejnom majetku ako celé číslo
  22. Kalórie verejného majetku ako celé číslo
  23. Koniec triedy
  24. Verejné jablko
  25. Zdedí ovocie
  26. Verejný príspevok nový ()
  27. Ja. Popis = „Apple“
  28. Ja, váha = 50
  29. Ja. Obsah cukru = 100
  30. Ja. Kalórie = 200
  31. Koniec Sub
  32. Koniec triedy
  33. Banán verejnej triedy
  34. Zdedí ovocie
  35. Verejný príspevok nový ()
  36. Ja. Popis = "Banán"
  37. Ja, váha = 100
  38. Ja. Obsah cukru = 200
  39. Ja. Kalórie = 400
  40. Koniec Sub
  41. Koniec triedy

FreakJNS

Rovnako ako v príspevku č. 5 by som to urobil aj ja. Niekoľko bodov, ktoré by som tiež uviedol:

Neexistuje ovocie ako skutočný predmet, môžete jesť jablko alebo banán, ale nie „čisté“ ovocie - ovocie je len všeobecný výraz pre skutočné predmety, ale nie samotný skutočný predmet. Pre programovanie to znamená, že nemôžete vytvoriť objekt typu ovocia, je možné vytvoriť iba skutočné ovocie. Trieda ovocia je preto abstraktná a musí byť označená MustInherhit.

Zmysel by dával aj konštruktor (=> Public Sub New (.)) v triede ovocia. Hmotnosť, obsah cukru, kalórie, označenie atď. Sa tam musia preniesť ako parametre. Od staviteľa tried konkrétneho ovocia potom môžete pohodlne zavolať staviteľa vyššej triedy. Myslím si, že je to obzvlášť dôležité, keď sa vo vyššej triede MUSIA nastaviť určité hodnoty - bez konštruktora môžete jednu rýchlo zabudnúť.

Obsah cukru, kalórie atď. Sú určite iba náznakom, môže ich byť oveľa viac. Užitočné by mohlo byť zapuzdrenie extra triedy len pre nutričné ​​hodnoty. V tomto okamihu by ste o tom mohli uvažovať namiesto toho, aby ste namiesto triedy s pevnými nutričnými hodnotami použili zoznam výživových hodnôt. To by malo výhodu v tom, že vždy pridáte nutričné ​​hodnoty, ktoré sú skutočne potrebné. V konštruktore triedy jabĺk by to mohlo vyzerať takto: Me.Nutrition values.Add (nová nutričná hodnota („Sugar“, 42,7, eUnits.Grams)).

V hre sa teraz tiež dalo pokračovať. Napríklad chlieb má tiež názov a nutričné ​​hodnoty - nie je to však ovocie. Ale obe sú jedlé. Jedlo abstraktnej triedy by preto mohlo slúžiť ako vyššia trieda pre ovocie, pečivo atď. To, kam nakreslíte čiaru, závisí od vašej žiadosti. Ak vás zaujíma iba ovocie, nemá zmysel vytvárať hierarchie dedičstva tak dlho (=> mätúce)