Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

kaloyannikov avatar kaloyannikov 531 Точки

Задача от домашно по ООП

Define a class Person that has name, age and email. The name and age are mandatory. The email is optional. Define properties that accept non-empty name and age in the range [1 ... 100]. In case of invalid arguments, throw an exception. Define a property for the email that accepts either null or non-empty string containing '@'. Define two constructors. The first constructor should take name, age and email. The second constructor should take name and age only and call the first constructor. Implement the ToString() method to enable printing persons at the console.

Това ми е решението

Опитвам се да гледам лекциите по ООП на C# и след това се мъча на Java :D

Искам да попитам това решението коректно ли е , понеже няма тестове или примери и не знам така ли трябва да се държи програмата.

Мерси.

Тагове:
0
C# OOP Basics 28/03/2016 15:30:31
butanfire avatar butanfire 32 Точки

Изглежда наред, само че е хубаво да правиш по специфичен Exception - примерно ArgumentException за неправилна стойност, отколкото generic Exception.

Също printStackTrace си го сложил навсякъде, не знам дали има смисъл? :) 
по- скоро при catch-a е по-добре да сложиш някаква default стойност.

Май не си минавал през лекцията за Exceptions още :))

1) По default променливите в класа са private , но е хубаво да пишеш на всяко Public/Private и т.н.

2) При age си сложил валидацията след сет-ването на стойността. : )

3) Не знам в Java дали го има, но в C# string-ове се проверяват за string.IsNullOrEmpty най-често.

4) За първи път виждам try/catch в констрктор, не знам дали в Java е нещо нормално :Д попринцип exception handling-a трябва да се извършва извън Класа. 

Задачата на класа е да върши определено нещо - ще хвърли exception, да - но обработката попринцип трябва да е извън класа. (ООП принципи)

Демек се маха всичкото try/catch от конструктора и си правиш exception handling-a извън класа.
Така направено ще print-не stacktrace-ове на всеки ход при тотално грешни данни, вместо да излезе от там :)))
Демек в крайна сметка ще създаде някакъв обект обаче не зная какви стойности ще има в обекта.

 

5) За getter-ите не си сложил this. (OOП практики)

 

Поздрави,

Владо

 

1
Jinjaar avatar Jinjaar 348 Точки

Здравей!
Препорачвам ти да изгледаш лекцията за енкапсулация!Подходът ти е верен но това с Еxception е тотално грешно.Не е нужно в конструктора да правиш тези try-catch блокове.Валидацийте се правят в сетърите, като още там правиш проверка дали примерно age < 0 от там следва throw new InvalidValueException("Age cannot be a negative number") ( или друг по описателен ексепшън  а не просто Еxeption това ще разбереш защо в лекцията за енкапсулация на данните); и ако age > 0 сетваш this.age = age;. Филдовете най-отгоре трябва да имат private access modifier за да не могат да бъдат достъпвани от вънка.toString() метода не приема параметри той просто се извиква отвън.... можеш да вземеш текущите за всеки обект с this.getAge().

1
kaloyannikov avatar kaloyannikov 531 Точки

Мерси за отговорите , все още съм гледал само първата лекция за дефиниране на класове и обекти и не съм запознат с принципите на ООП .

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.