[Homework] OOP - Defining Classes - Problem {3} - PC Catalog - изчисляване на цената
Здравейте,
Боря се със задачата PC Catalog, но не мога да се оправя с изчисляването на цената на компютъра. Ето кода на класа:
http://pastebin.com/E0xz6fY9
Поради някаква причина ми връща нула. Явно не достъпва цените на компонентите както трябва.
Ето и кода на останалите класове:
http://pastebin.com/EDgjG6j6
С лека корекция на кода всичко тръгна както трябва (предполагам, че така трябва да е). В конструктора сложих да се сетва цената на компа, самото пресмятане на цената го правя метод и го викам.
Ето кодът - ЦЪК.
Така стана, но не съм сигурен, че разбирам защо. Явно трябва да мине през конструктора. Бях останал с впечатление, че конструкторът се ползва само за елементите, които се вкарват външно при създаване на нов обект.
Конструкторът е иницализационен метод, който се тригерва веднъж при създаване на обекта с "new". В него можеш/трябва да вкарваш логиката, която ти е нужна, за да ти работи класа след инициализирането му.
Представи си, че все дено вместо констуктор, имаш метод който се казва, да речем, Init() (даже май така се казваха в пайтън конструкторите?).
Засместваме конструктора със следния метод:
Computer computer = new Computer;
computer.Init(name, components);
@Filkolev добра практика е да се вика пропъртито, дори и да си в класа. Гетърите не винаги съответстват на полето. В повечето случаи имаш пропърти, на което get-а казва return this.field, но това не винаги е така. Да речем, че някой записва в каталога ти цената в евро, обаче искаш когато оперираш над нея или когато я показваш на потребителя, тя за е във валутата, с която се оперира в неговата държава. Тогава сетъра ще сетва цената в евро, но гетъра ще проверява какъв е локейла на потребителя и ще умножи по курса на съответната валута. Дори и да си вътре в класа, ти искаш да сметнеш цената на всички компонненти примерно в левове, въпреки че са вкарани в евро.
Тогава се намесва гетъра, който връща стойността според локейла и ти трябва да викнеш пропъртито, за да се тригерне гетъра. Разбира се debateful е това дали гетъра трябва да връща цена според локейла, може би примерът ми не беше много добър, но се надявам, че схващаш логиката. В езици като Джава и РНР е прието дори и в класа да се вика this.getPrice()http://stackoverflow.com/questions/271318/should-you-access-a-variable-within-the-same-class-via-a-property