JavaRush /مدونة جافا /Random-AR /عشرة مبادئ للتصميم كائني التوجه يجب أن يعرفها مبرمج جافا
MaximAba
مستوى

عشرة مبادئ للتصميم كائني التوجه يجب أن يعرفها مبرمج جافا

نشرت في المجموعة
مبادئ التصميم الشيئي (OOD) هي جوهر البرمجة الشيئية في Java (OOP)، لكنني أرى أن معظم مبرمجي Java يعملون مع أنماط Singleton و Decorator أو "Observer" ، ولا يعيرون اهتمامًا كافيًا لدراسة التحليل والتحليل الشيئي. تصميم. بالطبع، من المهم تعلم أساسيات OOP : التجريد، التغليف، تعدد الأشكال والميراث، ولكن في الوقت نفسه، من المهم بنفس القدر معرفة مبادئ التصميم من أجل إنشاء منتجات جيدة التنظيم ومفهومة. ألاحظ باستمرار المبرمجين والمطورين من مختلف المستويات الذين لم يسمعوا عن مبادئ SOLID OOD ، أو ببساطة لا يعرفون المزايا التي يوفرها مبدأ التصميم هذا أو ذاك، أو كيفية تطبيقه في التعليمات البرمجية. خلاصة القول، نسعى دائمًا لتحقيق تماسك التعليمات البرمجية والتصميم الجيد في الحل الخاص بك. من الأمثلة الرائعة لتعلم Java وOOD هما Apache وSun مفتوحا المصدر. وهي توضح كيفية استخدام مبادئ OOD في كتابة التعليمات البرمجية في برامج Java. رسم توضيحي لاستخدام الأنماط في JDK: المصنع، نمط "المصنع" في فئة BorderFactory ، ما هو نمط تصميم المصنع... ، نمط Singleton، "singleton"، في فئة Runtime RunTime ، نمط الديكور، "مصمم الديكور" في فئات java.io المختلفة. بالمناسبة، إذا كنت مهتمًا بممارسة كود جافا، فاقرأ جافا الفعالة، جوشوا بلوخ (على سبيل المثال، جافا الفعالة المترجمة إلى الروسية )، تحفة من مؤلف Java API. أيضًا فيما يتعلق بموضوع OOD والأنماط، أوصي بنمط التصميم الأول للرأس، بالإضافة إلى التحليل والتصميم الموجه للكائن الأول. ستساعدك هذه الكتب على كتابة تعليمات برمجية أفضل من خلال الاستفادة من مبادئ OOD. على الرغم من أن أفضل طريقة لتعلم أي مبادئ هي الممارسة وفهم عواقب انتهاك هذه المبادئ ذاتها، إلا أن موضوع هذه المقالة هو مقدمة لمبادئ OOD لمبرمجي Java الذين لا يستخدمونها بعد أو يتعلمون اللغة فقط. أعتقد أن كل مبدأ من المبادئ المعلنة لـ OOD ( SOLID ) يستحق مقالة منفصلة مع شرح مفصل للجوهر، وسأحاول في المستقبل (كتابة هذه المقالات - تقريبًا. ترجمة.)، ولكن في الوقت الحالي، استعد لتجاوز الأمر بسرعة.عشرة مبادئ للتصميم الموجه للكائنات يجب أن يعرفها مبرمج Java - 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у, который сможет работать с любой новой реализацией интерфейса. Используйте переменные интерфейсного типаأو الأساليب ذات القيمة المرجعة أو الأساليب ذات المعلمات. نفس النصيحة موجودة في كتب Java و OOD الفعالة. مبدأ التفويض لا تفعل كل شيء بنفسك، بل قم بتخصيص العمل للفصل المناسب. أحد الأمثلة الكتابية لتطبيق مبدأ التفويض هو استخدام طريقتي يساوي () و hashCode (). لمقارنة كائنين، نترك الفصل يقوم بالعمل بنفسه، بدلاً من ترك التحقق لفئة العميل. وتتمثل ميزة هذا المبدأ في أنه يتجنب التشفير المزدوج ويسهل تغيير السلوك. ستساعدك جميع مبادئ التصميم الموجه للكائنات المذكورة أعلاه على كتابة تعليمات برمجية مرنة وأفضل ومتماسكة ولكن بدون اتصالات غير ضرورية. النظرية هي الخطوة الأولى. الشيء الأكثر أهمية هو تطوير القدرة على تحليل أين تنطبق مبادئ OOD هذه. راقب لترى ما إذا كنت تنتهك أيًا من المبادئ، مما يعرض مرونة التعليمات البرمجية الخاصة بك للخطر. في الوقت نفسه، لا يوجد شيء مثالي، فمن المستحيل دائمًا حل المشكلات فقط من خلال تطبيق مبادئ OOD في البرمجة. إنها ضرورية، في معظمها، لحلول ومشاريع الشركات ذات دورة الدعم الفني الطويلة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION