Компактна обробка декількох об’єктів з однаковими властивостями - Інші проблеми -

існує 6-й Відповіді в цій темі. Останній допис (13 липня 2013 р., 14:11) - від mocede.

єктів

моцедувати

Зареєстровано: 7 липня 2013 року

Я хотів би розробити невелику програму, яка в основному поводиться так:

Скажімо, у мене є банан, диня, яблуко та полуниця.

Всі вони мають однакові, але специфічні характеристики: вага, вміст цукру та калорійність.

Тепер я хочу автоматично розрахувати загальну вагу, загальний вміст цукру та загальну кількість калорій, якщо у мене є 5 бананів, 3 дині та 2 яблука. Кількість фруктів залежить від введення користувачем.

Спочатку я повинен десь визначити властивості. У C ++ я здебільшого передав цю функцію як просту функцію в додатковий файл, де були зроблені лише такі визначення. Це зробило фактичний вихідний код чітким та простішим у обслуговуванні.

Як я можу реалізувати це у VB? Я думаю, що рішення досить просте, але я думаю, що це трохи на трубці, тим більше, що в моєму практичному прикладі у мене є близько 30 "фруктів", кожен з 10 однаковими, але специфічними властивостями.

Дякую заздалегідь "

РодІз Німеччини

Зареєстровано: 30 вересня 2010 р

Вихідний код VB.NET

  1. Для кожного фрукта в myObstList
  2. зробити щось із фруктами
  3. Далі

моцедувати

Зареєстровано: 7 липня 2013 року

Дякую за відповідь та за правильний словниковий запас!

Ще раз повторю, чи правильно я зрозумів ваше твердження:

Я піднімаюся в меню "Додати клас проекту." і створити новий (базовий) клас під назвою "Frucht.vb".

Там я створюю загальні властивості:

Вихідний код VB.NET

  1. Публічний клас base class_fruit
  2. Затемнити вагу як ціле число
  3. Затемніть вміст цукру як ціле число
  4. Приглушити калорії як ціле
  5. Кінцевий клас

У новому класі(?) у додатковому файлі класу(?) Тепер я викладаю фрукти з вашими конкретними атрибутами:

Вихідний код VB.NET

  1. Відкритий клас abglKlasse_apfel
  2. Затемнити вагу як ціле число = 50
  3. Затемніть вміст цукру як ціле число = 100
  4. Приглушити калорії як ціле число = 200
  5. Кінцевий клас

Правильно?

Як це розуміється під хитрощами? Наскільки мені відомо, він представляє набраний список об’єктів (= мої люди?!), До яких я можу отримати доступ через індекс.

Я ще не до кінця розумію, як я можу сказати, що з 3 полуницею і 4 динями моя програма також обробляє 3 рази ваги полуниці (як і всі інші атрибути) і в 4 рази вагу, включаючи всі інші атрибути дині.

Думаю, у мене тут проблема з розумінням. Я збентежений.: wacko: wacko: wacko:

Цю публікацію вже редагували 1 раз, востаннє "mocede" (13 липня 2013 р., 12:29)

Правильно, спочатку вам потрібен базовий клас. Цей клас містить усі властивості, якими поділяються всі фрукти.

Вихідний код VB.NET

  1. Громадські фрукти класу MustInherit
  2. Громадська вага як ціле число
  3. Загальний вміст цукру як ціле
  4. Публічні калорії як ціле
  5. Кінцевий клас

Потім для кожного окремого фрукта ви створюєте окремий клас, який успадковує властивості та методи класу фруктів. Метод New викликається при створенні об'єкта. Потім у методі ми встановлюємо відповідні значення для плодів.

Вихідний код VB.NET

  1. Яблуко громадського класу
  2. Успадковує фрукти
  3. Public Sub Новий ()
  4. Вага = 50
  5. Цукор = 100
  6. Калорії = 120
  7. Кінець Sub
  8. Кінцевий клас


Тепер давайте складемо список усіх фруктів і пройдемося по списку.

Вихідний код VB.NET

  1. 'Створіть список типу "Фрукти"
  2. Dim FruchtСписок нових списків (Frucht)
  3. 'Додати яблуко до списку
  4. FruchtListe.Add (New Apple)
  5. 'Перегляньте список
  6. Для кожного поточного фрукта як фрукта у списку фруктів
  7. Messagebox.Show ("Фрукти мають" & CurrentFruit.Clories & "Calories")
  8. Далі

3646

Reg ([Ee] x) Корисні голоси 276 внесків 2654 корисні голоси 276 Стать Чоловічі мови програмування, що використовуються VB.NET, C # Колишні імена користувачів nafets3646

Вихідний код VB.NET

  1. Форма публічного класу 1
  2. Private Sub Button1_Click (відправник як об’єкт, e як EventArgs) Обробляє кнопку 1.Click
  3. Затемніть мій холодильник, як новий список (про Фрухта) 'Ваш холодильник
  4. MyCridge.Add (New Apple) 'Яблуко додається в холодильник
  5. MeinKridge.Add (New Banana) 'І банан теж
  6. «Тепер вам доведеться додати манго, але оскільки ви зазвичай не купуєте його, у вас немає класу для нього.
  7. Тож давайте створимо фрукт з датами для манго
  8. MyCridge.Add (New Frucht With)
  9. Для кожного FruchtImCridge як Frucht In MeinCridge 'Тепер ми проглядаємо кожен фрукт у холодильнику та виводимо його дані
  10. MessageBox.Show (Рядок. Формат ("Опис:; Вага:; Вміст цукру:; Калорії:", _
  11. Фрукти в холодильнику. Опис, _
  12. Фрукти в холодильнику. Вага, _
  13. Фрукти в холодильнику. Вміст цукру, _
  14. Фрукти в холодильнику. Калорії))
  15. Далі
  16. Кінець Sub
  17. Кінцевий клас
  18. Фрукти громадського класу
  19. Позначення державного майна як рядок
  20. Вага державного майна вдвічі більше
  21. Вміст цукру в державній власності як ціле
  22. Калорії державного майна як цілі
  23. Кінцевий клас
  24. Яблуко громадського класу
  25. Успадковує фрукти
  26. Public Sub Новий ()
  27. Я. Опис = "Apple"
  28. Я. Вага = 50
  29. Я. Вміст цукру = 100
  30. Я. Калорії = 200
  31. Кінець Sub
  32. Кінцевий клас
  33. Банан громадського класу
  34. Успадковує фрукти
  35. Public Sub Новий ()
  36. Я. Опис = "Банан"
  37. Я. Вага = 100
  38. Я. Вміст цукру = 200
  39. Я. Калорії = 400
  40. Кінець Sub
  41. Кінцевий клас

FreakJNS

Як і в Пості № 5, я б теж це зробив. Однак кілька пунктів, які я б також включив:

Немає фруктів як реальний об'єкт, ви можете з'їсти яблуко або банан, але не "чистий" фрукт - фрукт - це просто загальний термін для реальних об'єктів, але не сам реальний об'єкт. Для програмування це означає, що ви не можете створити об'єкт типу фрукта, можна створити лише справжні фрукти. Таким чином, клас фруктів є абстрактним і повинен бути позначений MustInherhit.

Конструктор (=> Public Sub New (.)) у класі fruit також має сенс. Вага, вміст цукру, калорії, позначення тощо повинні бути перенесені туди як параметри. Тоді з конструктора класів бетонних фруктів ви можете з комфортом назвати конструктор вищого класу. Я думаю, що це особливо важливо, коли певні значення МОЖЕ бути встановлено у вищому класі - без конструктора ви швидко забуваєте його.

Вміст цукру, калорій тощо - це, звичайно, лише натяк, може бути набагато більше. Інкапсулювання додаткового класу лише для харчових цінностей може бути корисним. На цьому етапі ви можете подумати про це, замість того, щоб використовувати список (з харчовою цінністю) замість класу з фіксованими харчовими цінностями. Це мало б ту перевагу, що ви завжди додавали поживні цінності, які насправді потрібні. У конструкторі класу яблук це може виглядати так: Me.Nutrition values.Add (нова харчова цінність ("Цукор", 42,7, eUnits.Gramm)).

Тепер гру також можна продовжувати. Наприклад, хліб також має назву та харчові цінності - але це не фрукт. Але обидва їстівні. Тому їстівний абстрактний клас може служити вищим класом для фруктів, хлібобулочних виробів тощо. Де ви проведете лінію, залежить від вашої заявки. Якщо вас цікавлять лише фрукти, немає сенсу створювати ієрархії успадкування так довго (=> заплутано)