Loading...
kosio197 avatar kosio197 104 Точки

BashSoft Въпроси

Привет,

Докато правя лабовете, често ми изникват различни въпроси. Ще се опитам да ги обобщя тук. Ще се раздвам на вашите коментари и други въпроси(дори и вече да сте си отговорили на тях) / идеи по темата.

1. Множествено число в имената на пакетите: bg.softuni.models, bg.softuni.model.exceptions, bg.softuni.contracts - тук последната дума е в множествено число, а на много места ми е правило впечатление че е в единствено (най - често model) - Има ли някаква конвенция за това или е въпрос на избор?

2. bg.softuni.contracts - това често съм го виждал като bg.softuni.interface -  Предполагам са синоними и е въпрос на избор, но все пак да попитам, така ли е ?

3. Тъй като са се събрали доста  интерфейси в пакета contracts, няма ли да е по - добре да се разделят в подпакети, например contracts.repository или  repository.contacts - И тук имам въпрос, ако се направи кое от двете е по - добро като име и защо?

4. Пакета bg.softuni.staticData - Според https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html би трябвало иментата на пакетите да са с малки букви?

5. Абстрактния клас Command, при всички негови наследници има валидация, която ако не мине се хвърля един и същи exception и мисля, че може тази валидация да се изкара в абстрактния клас:

    protected abstract boolean validate();
    protected abstract void doExecute() throws Exception;

    @Override
    public void execute() throws Exception {
        if(!validate()) {
            throw new InvalidCommandException(input);
        }

        doExecute();
    };

6. Интерфейсите Downloader и AsynchDownloader, защо AsynchDownloader наследява Downloader и който го имплементира да трябва да имплементира и двата метода ? Струва ми се малко обвързващо с конкретната задача, защо да не е един интерфейс Downloader с 2 имплементации?

7. SimpleOrderedBag и SimpleSortedList - List и Bag не са ли различни структури? Защо интерфейса да не се казва SimpleOrderedCollection, a тези две имена да са имена на класове, които го наследяват?

8. "Adding functionality to the StudentsRepository" - Не би ли трябвало двата нови метода да връщат интерфейса, SimpleOrderedBag в случая?

9. createStudentsComparator и createCourseComparator - каква е разликата в двата метода? Не трябва ли да е един метод createComparator, който да се ползва и за двете колекции?

 

4
C# OOP Advanced 20/07/2016 18:21:23
tilchev92 avatar tilchev92 Trainer 128 Точки

Привет, мерси за големия интерес към лаба, ще се опитам да отговоря възможно най-добре на въпросите ти :)


1. По-скоро е въпрос на избор. Има някакви правила, но като цяло всички конвенции зависят от фирмата/хората с които работиш и как сте се разбрали или е наредено. Тук пише, че се ползват и двете: "Use the plural for packages with homogeneous contents and the singular for packages with heterogeneous contents."

2. Така е.

3. Според мен и двете са валидни, аз по-скоро бих избрал втория вариант (repository.contacts). Отново въпрос на избор. Съгласен съм иначе, че се посъбраха доста

4. Също доста интересна тема. Питах мой познат java програмист и каза, че в тяхната фирма си пишат camelCase пакети. Тук има противоречиви коментари, но се среща и, че е разрешено да се ползва camelCase:

" In Chapter 7.7 Unique Package Names we see examples with package names that consist of upper case letters (so CamelCase notation would be OK) and they suggest to replace hyphonation by an underscore ("mary-lou" -> "mary_lou") and prefix java keywords with an underscore ("com.example.enum" -> "com.example._enum")

Some more examples for upper case letters in package names can be found in chapter 6.8.1 Package Names."

5. Приемам критиката, обаче е късно за промяна в сегашната итерация на курса, ще го имаме в предвид за следващата.

6. Идеята тук е че AsynchDownloader е разширение на Downloader тъй като самия downloadAsynch метод работи чрез download метода. По-лесно е да се имплементира само Downloader и затова той е по-базовия клас. А не са просто два отделни интерфейса защото ако са така, ще трябва класа ни да ги наследява и 2та а така, няма да можем да го скрием зад абстракция. Естествено може да направим и 3ти интерфейс който да ги обединява, както е с базата, но реших, че за 2 класа няма смисъл.

7. OrderedBad е абстрактна структура от данни (подобно на Queue, Stack, Map и т.н.), която пази подредени, но неуникални данни. Заради това интерфейса е кръстен така, листа вече е имплементация тъй като ако трябваше да е истински Bag трябваше отдолу да работи по доста по-забатачен начин.. повече инфо в курса за DataStructures. Може би все пак е poor naming choise от моя страна.

8. Абсолютно си прав за това, note taken.

9. Отново си прав - може да се дженерифицира.

В крайна сметка знам, че лаба не е перфектен, но това може да се каже, че е част от чара му, за по-напредналите от вас, тъй като може да го приемате като предизвикателство да го имплементирате по-добре от нас. Друг голям проблем в лаба примерно, е че като се разработваше в началото не се мислеше колко ще се scale-не (както много често става в реалността) и малко безразсъдно се ползваха статичните методи на OutputWriter, което сега доста затруднява задачата да се направи този клас инстанционен и да му се направи интерфейс. Което от своя страна го връзва с конзолата. Идеалния случай би бил всички класове освен примерно CommandInterpreter-a вместо да принтират да връщат някакви стрингове и само в този свързващ клас да се принти. Така може само там да се направи някаква инстанция на интерфейс OutputDisplayer (примерно), който в даден момент вместо да се имплементира с конзолен OutputWriter, да е с някакъв WebDisplayer, DesktopDisplayer или FileAppender.

5
26/07/2016 16:36:36
kaloyannikov avatar kaloyannikov 531 Точки

За да не отварям нова тема , да попитам относно лаба за Iterators && Comparators. 

Kaто бонус е дадено да имплементираме някой сортиращ алгоритъм .

Грешно ли е да сменя някой параметри , тъй като компаратор не ми трябва в случая , a да приемам само като String sortType (ascending , descending) ?

1
Bojo96 avatar Bojo96 Trainer 147 Точки

Здравей, няма проблем да го променяш както желаеш. Особено след края на курса е силно препоръчително за всички, да го extend-ват, като си го качат в GitHub, тъй като това е един малък проект, който всеки може да ползва в потфолиото си.  

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