JavaRush /Java-Blog /Random-DE /Zehn objektorientierte Designprinzipien, die ein Java-Pro...
MaximAba
Level 14

Zehn objektorientierte Designprinzipien, die ein Java-Programmierer kennen sollte

Veröffentlicht in der Gruppe Random-DE
Die Prinzipien des objektorientierten Designs (OOD) sind der Kern der objektorientierten Java-Programmierung (OOP), aber ich sehe, dass die meisten Java-Programmierer mit den Singleton- und Decorator- Mustern oder „Observer“ arbeiten und dem Studium der objektorientierten Analyse nicht genügend Aufmerksamkeit schenken Design. Natürlich ist es wichtig, die Grundlagen von OOP zu erlernen : Abstraktion, Kapselung, Polymorphismus und Vererbung, aber gleichzeitig ist es ebenso wichtig, die Designprinzipien zu kennen, um gut strukturierte und verständliche Produkte zu erstellen. Ich beobachte ständig Programmierer, Entwickler verschiedener Ebenen, die entweder noch nichts von den SOLID OOD-Prinzipien gehört haben oder einfach nicht wissen, welche Vorteile dieses oder jenes Designprinzip bietet oder wie man es im Code anwendet. Fazit: Streben Sie bei Ihrer Lösung immer nach Codekohärenz und gutem Design. Tolle Beispiele für das Erlernen von Java und OOD sind die Open-Source-Programme Apache und Sun. Sie zeigen, wie OOD-Prinzipien beim Schreiben von Code in Java-Programmen verwendet werden sollten. Veranschaulichung der Verwendung von Mustern im JDK: Factory, das „Factory“-Muster in der BorderFactory- Klasse , Was ist das Factory-Entwurfsmuster... , das Singleton-Muster „Singleton“ in der Runtime- RunTime- Klasse , das Decorator-Muster, „Dekorator“, in verschiedenen java.io-Klassen. Übrigens, wenn Sie daran interessiert sind, Java-Code zu üben, lesen Sie Effective Java, Joshua Bloch (z. B. Effective Java, übersetzt ins Russische ), ein Meisterwerk des Autors der Java-API. Auch zum Thema OOD und Muster empfehle ich Head First Design Pattern sowie Head First Object Oriented Analysis and Design. Diese Bücher helfen Ihnen, besseren Code zu schreiben, indem Sie die OOD-Prinzipien nutzen. Obwohl der beste Weg, Prinzipien zu erlernen, darin besteht, die Konsequenzen einer Verletzung dieser Prinzipien zu üben und zu verstehen, ist das Thema dieses Artikels eine Einführung in die Prinzipien von OOD für Java-Programmierer, die sie noch nicht verwenden oder die Sprache gerade erst lernen. Ich glaube, dass jedes der genannten Prinzipien von OOD ( SOLID ) einen separaten Artikel mit einer detaillierten Erläuterung des Wesens verdient, und ich werde in Zukunft versuchen (diese Artikel zu schreiben - ungefähre Übersetzung), aber vorerst Machen Sie sich bereit, es schnell durchzugehen.Zehn Prinzipien des objektorientierten Designs, die ein Java-Programmierer kennen sollte – 1 DRY (Не повторяйтесь) Первым принципом обозначим «не повторяйтесь», что значит, не пишите повторяющегося Codeа, используйте принцип абстракции, обобщая простые вещи в одном месте. Если у вас присутствует один и тот же блок Codeа более, чем в двух местах, подумайте об отдельном методе для него. Если есть константа для многоразового использования, создайте глобальную переменную с модификаторами public final. Большим преимуществом использования данного принципа является легкость дальнейшей технической поддержки. Важно также не злоупотреблять этим принципом, когда, к примеру, повторение Codeа существует не для самого Codeа, а для реализации функциональности. Например, когда вы проверяете OrderID и SSN, это не значит, что они идентичны oder станут таковыми в будущем. Используя одинаковый Code для двух разных функций oder элементов, вы связываете их тесно, и когда OrderID поменяет формат, Code проверки SSN перестанет работать. Имейте в виду такие связки и не комбинируйте все подряд, что использует схожий Code, но на самом деле, не является связанным. Инкапсулируйте то, что меняется Одна вещь постоянна в мире программного обеспечения — изменение. Инкапсулируйте Code, который в будущем будет меняться. Преимущество принципа в легкости тестирования и поддержки надлежащим образом инкапсулированного Codeа. При написании программ на java следуйте, по умолчанию, правилу создания переменных и методов с модификатором доступа private, расширяя доступ шаг за шагом, от private к protected, но не public. Несколько принципов дизайна java используют инкапсуляцию, паттерн Factory — хороший пример, где Code создания ein Objektов инкапсулирован и достаточно гибок, чтобы позже создавать новые ein Objektы, но без воздействия на существующий Code. Открыто-закрытый принцип дизайна Классы, методы, функции должны быть открыты для расширения (новой функциональности) и закрыты для модификации. Это отличный принцип из набора SOLID, соответствующий букве «О», предотвращающий изменение протестированного и работающего Codeа. Идеально, если вы добавляете новую функциональность только, когда ваш Code должен тестироваться, и в этом цель этого принципа ООД. Принцип уникальной ответственности (SRP) SRP соответствует букве S в SOLID и означает, что не должно существовать более 1 причины для изменения класса, иными словами, класс должен обладать уникальной функциональностью. Если один класс java реализует 2 набора функций, их сцепление создает ситуацию, при которой изменение одного нарушит имеющееся сочетание, что потребует нового раунда тестирования во избежание сюрпризов при использовании программ. Внедрение зависимостей (DI) oder принцип инверсии управления (IOC) Не просите зависимости, фреймворк вам её обеспечит. Этот принцип отлично реализован в фреймворке Spring. Прелесть принципа в том, что любой класс с внедренной зависимостью (DI, часть фреймворка Spring), легко тестировать с помощью ein Objektа-муляжа и легко поддерживать, потому что Code, создающий ein Objekt, инкапсулирован в фреймворке, и не смешивается с клиентским Codeом. Существует множество способов внедрять зависимости, например, используя инструментарий в Byte-Codeе от фреймворков аспектно-ориентированного программирования типа AspectJ oder используя прокси, Wie в Spring. Посмотрите этот пример использования принципа DI & IOC, представляющего букву D в аббревиатуре SOLID. Предпочитайте структуру наследованию Всегда ставьте на первое место структуру, композицию, если возможно. Кто-то может спорить с этим утверждением, но я нахожу, что приоритет композиции - гораздо более гибкий подход, чем реализация через наследование. Композиция позволяет изменить поведение класса во время исполнения, задавая свойства в текущем режиме. Использование интерфейсов для создания класса, применение полиморфизма, дает нам гибкость в улучшении реализации каждый раз. Даже в книге Effective Java говорится о преимуществе композиции над наследованием. Принцип подстановки Лисков (LSP) Согласно принципу LSP, буква L в SOLID, функции, которые используют ссылки на базовые классы, должны иметь возможность использовать ein Objektы производных классов, не зная об этом. LSP тесно связан с принципом уникальной ответственности и принципом разделения интерфейсов. Если у базового класса больше функциональности, чем у производного, такое соотношение нарушает принцип LSP. Wasбы следовать этому принципу, производный класс oder подкласс должен расширять функциональность, а не сужать её. Принцип разделения интерфейсов (ISP) Данный принцип гласит, что класс не должен внедрять интерфейс ( Was такое интерфейс в Java...) , если интерфейс не используется. В основном, такое происходит, когда интерфейс многофункциональный, а класс требует только одной функциональности. Разработка интерфейсов — сложная работа, реализовав интерфейс, трудно изменить его без изменения всей реализации. Другое преимущество использования принципа ISP заключается в том, что интерфейс внедряет методы до того, Wie Wieой-либо класс может их использовать, поэтому уникальная функциональность требует внедрения меньшего количества методов. Программирование для интерфейса, а не реализации «Всегда программируйте для интерфейса, а не реализации.» Следование этому принципу приведет вас к гибкому Codeу, который сможет работать с любой новой реализацией интерфейса. Используйте переменные интерфейсного типа, Methoden mit einem Rückgabewert oder Methoden mit Parametern. Der gleiche Rat ist in den Büchern „Effective Java“ und „OOD“ enthalten. Prinzip der Delegation: Machen Sie nicht alles selbst, sondern weisen Sie die Arbeit der entsprechenden Klasse zu. Ein Paradebeispiel für die Anwendung des Delegationsprinzips ist die Verwendung der Methoden equal() und hashCode(). Um zwei Objekte zu vergleichen, lassen wir die Klasse die Arbeit selbst erledigen, anstatt die Überprüfung der Client-Klasse zu überlassen. Der Vorteil dieses Prinzips besteht darin, dass es Doppelcodierungen vermeidet und eine einfache Verhaltensänderung ermöglicht. Alle oben genannten Prinzipien des objektorientierten Designs helfen Ihnen, flexiblen und besseren Code zu schreiben, kohärent, aber ohne unnötige Verbindungen. Theorie ist der erste Schritt. Das Wichtigste ist, die Fähigkeit zu entwickeln, zu analysieren, wo diese OOD-Prinzipien gelten. Achten Sie darauf, ob Sie gegen eines der Prinzipien verstoßen und die Flexibilität Ihres Codes gefährden. Gleichzeitig ist nichts perfekt; es ist unmöglich, Probleme immer nur durch die Anwendung der OOD-Prinzipien in der Programmierung zu lösen. Sie sind vor allem für Unternehmenslösungen und Projekte mit einem langen technischen Supportzyklus von entscheidender Bedeutung.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION