Procesare compactă a mai multor obiecte cu aceleași proprietăți - Alte probleme -

Există Al 6-lea Răspunsuri în acest subiect. Ultima postare (13 iulie 2013, 14:11) este de la Mocede.

compactă

mocede

Înregistrat: 7 iulie 2013

Aș dori să dezvolt un mic program, care se comportă practic după cum urmează:

Să spunem că am o banană, un pepene galben, un măr și o căpșună.

Toate au aceleași caracteristici specifice: greutate, conținut de zahăr și calorii.

Acum vreau să calculez automat greutatea totală, conținutul total de zahăr și caloriile totale dacă am 5 banane, 3 pepeni și 2 mere. Numărul de fructe depinde de intrarea utilizatorului.

Mai întâi trebuie să definesc proprietățile undeva. În C ++, am externalizat în cea mai mare parte acest lucru ca o funcție simplă într-un fișier suplimentar, unde au fost făcute doar astfel de definiții. Acest lucru a făcut ca sursa reală să fie clară și mai ușor de întreținut.

Cum pot implementa acest lucru în VB? Cred că soluția este destul de simplă, dar cred că este puțin pe tub, mai ales că în exemplul meu practic am aproximativ 30 de „fructe” fiecare cu 10 proprietăți identice, dar specifice.

Multumesc in avans"

RodFromGermany

Înregistrat: 30 septembrie 2010

Cod sursă VB.NET

  1. Pentru fiecare fruct din myObstList
  2. 'fă ceva cu fructe
  3. Următor →

mocede

Înregistrat: 7 iulie 2013

Vă mulțumim pentru răspuns și pentru vocabularul corect!

Din nou, să repet dacă am înțeles corect afirmația ta:

Urc în meniu „Adăugați clasa de proiect”. și creați o nouă clasă (de bază) numită "Frucht.vb".

Acolo creez proprietățile generale:

Cod sursă VB.NET

  1. Public Class baza class_fruit
  2. Reduce greutatea ca întreg
  3. Reduceți conținutul de zahăr ca întreg
  4. Reduceți caloriile ca întreg
  5. Sfârșitul clasei

Într-o nouă clasă(?) într-un fișier de clasă suplimentar(?) Acum prezint fructele cu atributele tale specifice:

Cod sursă VB.NET

  1. Public Class abglKlasse_apfel
  2. Greutate redusă ca întreg = 50
  3. Reduceți conținutul de zahăr ca întreg = 100
  4. Reduceți caloriile ca număr întreg = 200
  5. Sfârșitul clasei

Corect?

Cum se înțelege asta prin șiretlic? Din câte știu, reprezintă o listă tastată de obiecte (= oamenii mei?!) La care pot accesa prin index.

Încă nu înțeleg prea bine cum pot spune că programul meu procesează de asemenea 3x greutatea căpșunii (precum și toate celelalte atribute) și 4x greutatea, inclusiv toate celelalte atribute ale pepenelui cu 3 căpșuni și 4 pepeni.

Cred că am o problemă cu înțelegerea aici. Sunt derutat.: wacko: wacko: wacko:

Această postare a fost deja editată de 1 dată, ultima dată de „mocede” (13 iulie 2013, 12:29)

Corect, mai întâi ai nevoie de o clasă de bază. Această clasă conține toate proprietățile care sunt partajate de toate fructele.

Cod sursă VB.NET

  1. Public Must Musther Class Fruit
  2. Greutatea publică ca întreg
  3. Conținut public de zahăr ca număr întreg
  4. Caloriile publice ca întreg
  5. Sfârșitul clasei

Pentru fiecare fruct individual, creați apoi o clasă separată care va moșteni proprietățile și metodele clasei de fructe. Noua metodă este apelată atunci când obiectul este creat. În metodă stabilim apoi valorile corespunzătoare pentru fructe.

Cod sursă VB.NET

  1. Măr de clasă publică
  2. Moștenește fructele
  3. Sub public nou ()
  4. Greutate = 50
  5. Zahar = 100
  6. Calorii = 120
  7. Sfârșitul Sub
  8. Sfârșitul clasei


Acum să facem o listă cu toate fructele și să trecem prin listă.

Cod sursă VB.NET

  1. „Creați o listă de tipul„ Fructe ”
  2. Dim FruchtListe as New List (Of Frucht)
  3. 'Adăugați măr la listă
  4. FruchtListe.Add (Apple nou)
  5. - Parcurgeți lista
  6. Pentru fiecare fruct curent ca fruct în lista de fructe
  7. Messagebox.Show („Fructul are” & CurrentFruit.Calorii și „Calorii”)
  8. Următor →

nafets3646

Reg ([Ee] x) Evaluări utile 276 Contribuții 2.654 Evaluări utile 276 Sex masculin Limbaje de programare utilizate VB.NET, C # Fost nume de utilizator nafets3646

Cod sursă VB.NET

  1. Forma publică de clasă 1
  2. Butonul Sub privat 1_Click (expeditor ca obiect, și ca EventArgs) Manere buton 1. Faceți clic
  3. Dim My Fridge As New List (Of Frucht) 'Frigiderul tău
  4. MeinCridge.Add (Apple nou) „La frigider se adaugă un măr
  5. MeinKridge.Add (Banana nouă) „Și o banană
  6. „Acum trebuie să adăugați un mango, dar, de obicei, nu îl cumpărați, nu aveți nicio clasă pentru el.
  7. „Așadar, să creăm un fruct cu curmalele pentru o mango
  8. MyCridge.Add (Frucht nou cu)
  9. Pentru fiecare FruchtImCridge Ca Frucht în MeinCridge „Acum trecem prin fiecare fruct din frigider și îi scoatem datele
  10. MessageBox.Show (String. Format ("Descriere:; Greutate:; Conținut de zahăr:; Calorii:", _
  11. Fructe în frigider. Descriere, _
  12. Fructe în frigider. Greutate, _
  13. Fructe în frigider. Conținut de zahăr, _
  14. Fructe în frigider. Calorii))
  15. Următor →
  16. Sfârșitul Sub
  17. Sfârșitul clasei
  18. Fructe de clasă publică
  19. Denumirea proprietății publice ca șir
  20. Greutatea proprietății publice ca dublă
  21. Proprietate publică Conținut de zahăr ca număr întreg
  22. Caloriile proprietății publice ca număr întreg
  23. Sfârșitul clasei
  24. Măr de clasă publică
  25. Moștenește fructele
  26. Sub public nou ()
  27. Eu. Descriere = "Apple"
  28. Eu. Greutate = 50
  29. Eu. Conținut de zahăr = 100
  30. Eu. Calorii = 200
  31. Sfârșitul Sub
  32. Sfârșitul clasei
  33. Banana de clasă publică
  34. Moștenește fructele
  35. Sub public nou ()
  36. Eu. Descriere = "Banana"
  37. Eu. Greutate = 100
  38. Eu. Conținut de zahăr = 200
  39. Eu. Calorii = 400
  40. Sfârșitul Sub
  41. Sfârșitul clasei

FreakJNS

La fel ca în Post # 5, aș face-o și eu. Cu toate acestea, câteva puncte pe care le-aș include și:

Nu există fruct ca obiect real, puteți mânca un măr sau o banană, dar nu un fruct „pur” - fructul este doar un termen generic pentru obiecte reale, dar nu un obiect real în sine. Pentru programare, acest lucru înseamnă că nu puteți crea un obiect de tip fruct, doar fructe reale pot fi create. Clasa de fructe este deci abstractă și trebuie marcată cu MustInherhit.

Un constructor (=> Public Sub New (.)) din clasa de fructe ar avea, de asemenea, sens. Greutatea, conținutul de zahăr, caloriile, desemnarea etc. trebuie apoi transferate acolo ca parametri. De la constructorul claselor de fructe din beton puteți apela apoi confortabil la constructorul clasei superioare. Cred că acest lucru este deosebit de important atunci când anumite valori TREBUIE setate în clasa superioară - fără un constructor puteți uita rapid unul.

Conținutul de zahăr, caloriile etc. sunt cu siguranță doar un indiciu, pot fi mult mai multe. Ar putea fi utilă încapsularea unei clase suplimentare doar pentru valorile nutriționale. În acest moment ați putea să vă gândiți la asta în loc să utilizați o listă (cu valoare nutrițională) în locul unei clase cu valori nutriționale fixe. Acest lucru ar avea avantajul că adăugați întotdeauna valorile nutriționale care sunt de fapt necesare. Ar putea arăta astfel în constructorul clasei de mere: Me.Nutrition values.Add (nouă valoare nutrițională („Sugar”, 42.7, eUnits.Gramm)).

Acum, jocul ar putea fi continuat. Pâinea, de exemplu, are și un nume și valori nutritive - dar nu este un fruct. Dar ambele sunt comestibile. O clasă abstractă comestibilă ar putea servi drept clasă de top pentru fructe, produse de patiserie etc. Unde desenați linia depinde de aplicația dvs. Dacă sunteți interesat doar de fructe, nu are sens să creați ierarhii de moștenire atât de mult timp (=> confuz)