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.

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
- Pre každé ovocie v zozname myObstList
- „urob niečo s ovocím
- Ď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
- Verejná trieda základná trieda_ ovocie
- Tlmená hmotnosť ako celé číslo
- Dimujte obsah cukru ako celé číslo
- Dim kalórie ako celé číslo
- 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
- Verejná trieda abglKlasse_apfel
- Tlmená hmotnosť ako celé číslo = 50
- Dimujte obsah cukru ako celé číslo = 100
- Dim kalórie ako celé číslo = 200
- 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
- Verejné ovocie triedy MustInherit
- Verejná váha ako celé číslo
- Verejný obsah cukru ako celé číslo
- Verejné kalórie ako celé číslo
- 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
- Verejné jablko
- Zdedí ovocie
- Verejný príspevok nový ()
- Hmotnosť = 50
- Cukor = 100
- Kalórie = 120
- Koniec Sub
- Koniec triedy
Teraz si urobme zoznam všetkých druhov ovocia a prejdime ním.
Zdrojový kód VB.NET
- „Vytvoriť zoznam typu„ Ovocie “
- Dim FruchtListe ako nový zoznam (Of Frucht)
- 'Pridajte jablko do zoznamu
- FruchtListe.Add (nové Apple)
- „Prejdite zoznamom
- Pre každé CurrentFruit ako ovocie v zozname FruitList
- Messagebox.Show („Ovocie má“ & CurrentFruit.Calories & „Kalórie“)
- Ď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
- Formulár pre verejnú triedu 1
- Súkromné sub Button1_Click (odosielateľ ako objekt, e ako EventArgs) narába s Button1.Click
- Dim MeinKühlridge ako nový zoznam (spoločnosti Frucht) 'Vaša chladnička
- MyCridge.Add (nové jablko) „Do chladničky sa pridá jablko
- MeinFridge.Add (nový banán) 'A tiež banán
- „Teraz musíš pridať mango, ale keďže si ho obvykle nekúpiš, nemáš na to žiadnu triedu.
- „Poďme si teda pripraviť ovocie s datlami pre mango
- MyCridge.Add (nový Frucht s)
- Pre každú FruchtImCridge ako Frucht In MeinCridge „Teraz prechádzame každým ovocím v chladničke a poskytujeme jeho údaje
- MessageBox.Show (String. Format ("Popis:; Váha:; Obsah cukru:; Kalórie:", _
- Ovocie v chladničke. Popis, _
- Ovocie v chladničke. Hmotnosť, _
- Ovocie v chladničke. Obsah cukru _
- Ovocie v chladničke. Kalórie))
- Ďalšie
- Koniec Sub
- Koniec triedy
- Verejné ovocie
- Označenie verejného majetku ako reťazec
- Váha verejného majetku dvojnásobná
- Cukorný obsah vo verejnom majetku ako celé číslo
- Kalórie verejného majetku ako celé číslo
- Koniec triedy
- Verejné jablko
- Zdedí ovocie
- Verejný príspevok nový ()
- Ja. Popis = „Apple“
- Ja, váha = 50
- Ja. Obsah cukru = 100
- Ja. Kalórie = 200
- Koniec Sub
- Koniec triedy
- Banán verejnej triedy
- Zdedí ovocie
- Verejný príspevok nový ()
- Ja. Popis = "Banán"
- Ja, váha = 100
- Ja. Obsah cukru = 200
- Ja. Kalórie = 400
- Koniec Sub
- 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)