JavaRush /Java блогы /Random-KK /Java программисті білуі керек нысанға бағытталған дизайнн...
MaximAba
Деңгей

Java программисті білуі керек нысанға бағытталған дизайнның он принципі

Топта жарияланған
Объектіге бағытталған дизайн (OOD) принциптері Java Объектіге бағытталған бағдарламалаудың (OOP) өзегі болып табылады, бірақ мен Java бағдарламашыларының көпшілігі Singleton және Decorator үлгілерімен жұмыс істейтінін көремін . немесе «Байқаушы» . дизайн. Әрине, OOP негіздерін үйрену маңызды : абстракция, инкапсуляция, полиморфизм және мұра, бірақ сонымен бірге жақсы құрылымдалған және түсінікті өнімдерді жасау үшін дизайн принциптерін білу бірдей маңызды. Мен SOLID OOD принциптері туралы естімеген немесе осы немесе басқа дизайн принципі беретін артықшылықтар туралы немесе оны codeта қалай қолдану керектігін білмейтін әртүрлі деңгейдегі бағдарламашыларды, әзірлеушілерді үнемі бақылап отырамын. Қорытындылай келе, әрқашан шешіміңізде codeтың үйлесімділігіне және жақсы дизайнға ұмтылыңыз. Java және OOD үйренудің тамаша мысалдары ашық бастапқы Apache және Sun болып табылады. Олар Java бағдарламаларында code жазуда OOD принциптерін қалай пайдалану керектігін көрсетеді. JDK-де үлгілерді пайдалану иллюстрациясы: Factory, BorderFactory класындағы “зауыттық” үлгі , Зауыттық дизайн үлгісі дегеніміз не... , Singleton үлгісі, “singleton”, Runtime RunTime сыныбында , Decorator үлгісі, «декоратор», әртүрлі java.io сыныптарында. Айтпақшы, егер сіз Java-codeты үйренуге қызығушылық танытсаңыз, Java API авторының шедеврі, Effective Java, Joshua Bloch (мысалы, Effective Java орыс тіліне аударылған ) оқыңыз. Сондай-ақ OOD және үлгілер тақырыбы бойынша мен Head First Design Pattern, сондай-ақ Head First Object Oriented Analysis and Design қолданбаларын ұсынамын. Бұл кітаптар OOD принциптерін пайдалана отырып, жақсырақ code жазуға көмектеседі. Кез келген принциптерді үйренудің ең жақсы жолы тәжірибе және дәл осы принциптерді бұзудың салдарын түсіну болса да, бұл мақаланың тақырыбы әлі қолданbyteын немесе тілді енді ғана үйреніп жатқан Java бағдарламашыларына арналған OOD принциптеріне кіріспе. Мен OOD ( SOLID ) айтылған қағидаларының әрқайсысы мәнін егжей-тегжейлі түсіндіретін жеке мақалаға лайық деп есептеймін және мен болашақта тырысамын (осы мақалаларды жазуға - шамамен аударма), бірақ әзірге, оны тез арада өтуге дайын болыңыз.Java программисті білуі керек an objectілі-бағытталған дизайнның он принципі - 1 DRY (Не повторяйтесь) Первым принципом обозначим «не повторяйтесь», что значит, не пишите повторяющегося codeа, используйте принцип абстракции, обобщая простые вещи в одном месте. Если у вас присутствует один и тот же блок codeа более, чем в двух местах, подумайте об отдельном методе для него. Если есть константа для многоразового использования, создайте глобальную переменную с модификаторами public final. Большим преимуществом использования данного принципа является легкость дальнейшей технической поддержки. Важно также не злоупотреблять этим принципом, когда, к примеру, повторение codeа существует не для самого codeа, а для реализации функциональности. Например, когда вы проверяете OrderID и SSN, это не значит, что они идентичны or станут таковыми в будущем. Используя одинаковый code для двух разных функций or элементов, вы связываете их тесно, и когда OrderID поменяет формат, code проверки SSN перестанет работать. Имейте в виду такие связки и не комбинируйте все подряд, что использует схожий code, но на самом деле, не является связанным. Инкапсулируйте то, что меняется Одна вещь постоянна в мире программного обеспечения — изменение. Инкапсулируйте code, который в будущем будет меняться. Преимущество принципа в легкости тестирования и поддержки надлежащим образом инкапсулированного codeа. При написании программ на java следуйте, по умолчанию, правилу создания переменных и методов с модификатором доступа private, расширяя доступ шаг за шагом, от private к protected, но не public. Несколько принципов дизайна java используют инкапсуляцию, паттерн Factory — хороший пример, где code создания an objectов инкапсулирован и достаточно гибок, чтобы позже создавать новые an objectы, но без воздействия на существующий code. Открыто-закрытый принцип дизайна Классы, методы, функции должны быть открыты для расширения (новой функциональности) и закрыты для модификации. Это отличный принцип из набора SOLID, соответствующий букве «О», предотвращающий изменение протестированного и работающего codeа. Идеально, если вы добавляете новую функциональность только, когда ваш code должен тестироваться, и в этом цель этого принципа ООД. Принцип уникальной ответственности (SRP) SRP соответствует букве S в SOLID и означает, что не должно существовать более 1 причины для изменения класса, иными словами, класс должен обладать уникальной функциональностью. Если один класс java реализует 2 набора функций, их сцепление создает ситуацию, при которой изменение одного нарушит имеющееся сочетание, что потребует нового раунда тестирования во избежание сюрпризов при использовании программ. Внедрение зависимостей (DI) or принцип инверсии управления (IOC) Не просите зависимости, фреймворк вам её обеспечит. Этот принцип отлично реализован в фреймворке Spring. Прелесть принципа в том, что любой класс с внедренной зависимостью (DI, часть фреймворка Spring), легко тестировать с помощью an object-муляжа и легко поддерживать, потому что code, создающий an object, инкапсулирован в фреймворке, и не смешивается с клиентским codeом. Существует множество способов внедрять зависимости, например, используя инструментарий в byte-codeе от фреймворков аспектно-ориентированного программирования типа AspectJ or используя прокси, How в Spring. Посмотрите этот пример использования принципа DI & IOC, представляющего букву D в аббревиатуре SOLID. Предпочитайте структуру наследованию Всегда ставьте на первое место структуру, композицию, если возможно. Кто-то может спорить с этим утверждением, но я нахожу, что приоритет композиции - гораздо более гибкий подход, чем реализация через наследование. Композиция позволяет изменить поведение класса во время исполнения, задавая свойства в текущем режиме. Использование интерфейсов для создания класса, применение полиморфизма, дает нам гибкость в улучшении реализации каждый раз. Даже в книге Effective Java говорится о преимуществе композиции над наследованием. Принцип подстановки Лисков (LSP) Согласно принципу LSP, буква L в SOLID, функции, которые используют ссылки на базовые классы, должны иметь возможность использовать an objectы производных классов, не зная об этом. LSP тесно связан с принципом уникальной ответственности и принципом разделения интерфейсов. Если у базового класса больше функциональности, чем у производного, такое соотношение нарушает принцип LSP. Whatбы следовать этому принципу, производный класс or подкласс должен расширять функциональность, а не сужать её. Принцип разделения интерфейсов (ISP) Данный принцип гласит, что класс не должен внедрять интерфейс ( What такое интерфейс в Java...) , если интерфейс не используется. В основном, такое происходит, когда интерфейс многофункциональный, а класс требует только одной функциональности. Разработка интерфейсов — сложная работа, реализовав интерфейс, трудно изменить его без изменения всей реализации. Другое преимущество использования принципа ISP заключается в том, что интерфейс внедряет методы до того, How Howой-либо класс может их использовать, поэтому уникальная функциональность требует внедрения меньшего количества методов. Программирование для интерфейса, а не реализации «Всегда программируйте для интерфейса, а не реализации.» Следование этому принципу приведет вас к гибкому codeу, который сможет работать с любой новой реализацией интерфейса. Используйте переменные интерфейсного типа, қайтарылатын мәні бар әдістер немесе параметрлері бар әдістер. Дәл осындай кеңес Effective Java және OOD кітаптарында бар. Өкілдік принципі Барлығын өзіңіз жасамаңыз, жұмысты тиісті сыныпқа тапсырыңыз. Делегация принципін қолданудың оқулық мысалы - equals() және hashCode() әдістерін пайдалану. Екі нысанды салыстыру үшін тексеруді клиент сыныбына қалдырмай, сыныпқа жұмысты өзі орындауға рұқсат береміз. Бұл принциптің артықшылығы – ол қос codeтауды болдырмайды және мінез-құлықты өзгертуді жеңілдетеді. Объектіге бағытталған дизайнның жоғарыда аталған барлық принциптері когерентті, бірақ қажетсіз қосылымдарсыз икемді және жақсырақ codeты жазуға көмектеседі. Теория - бұл бірінші қадам. Ең бастысы, осы OOD принциптерінің қайда қолданылатынын талдау қабілетін дамыту. Кодыңыздың икемділігіне қауіп төндіретін қағидалардың кез келгенін бұзып жатқаныңызды көру үшін қараңыз. Сонымен қатар, ештеңе мінсіз емес, тек OOD принциптерін бағдарламалауда қолдану арқылы әрқашан мәселелерді шешу мүмкін емес. Олар көп жағдайда ұзақ техникалық қолдау циклі бар корпоративтік шешімдер мен жобалар үшін өте маңызды.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION