При розробці програмного забезпечення, Модуль це шаблон проєктування, який дозволяє реалізувати концепцію програмних модулів, яка визначена в модульному програмуванні, в мові програмування з неповною підтримкою цієї концепції.
Цей шаблон може реалізовуватись багатьма способами, в залежності від мови програмування для якої він застосовуються, наприклад із застосуванням шаблону одинак, статичними членами класу при об'єктному програмуванні і глобальними функціями при процедурному програмуванні.
Визначення
Шаблон проєктування програмного забезпечення модуль реалізує властивості і синтаксичну структуру визначену як парадигма модульного програмування при використанні в мовах програмування які мають неповну підтримку цієї концепції.
Концепція
При розробці програмного забезпечення, програмний код може бути розділений на компоненти, які реалізують конкретну функцію або містять усе необхідне для вирішення конкретної задачі. Модульне програмування є одним з підходів реалізації цього.
Концепція модульності не підтримується повністю в багатьох мовах програмування.
Характеристики
Для того, щоб цей шаблон можна було реалізувати за допомогою шаблону одинака, або за допомогою іншого способу групування пов'язаного коду, необхідно виконати наступні умови:
- Частина коду має мати глобальну або публічну область видимості і спроєктована для глобального/публічного використання. Додаткові приховані і захищені методи або код можуть виконуватись через доступ до публічного коду.
- Модуль повинен мати функцію ініціалізації яка є еквівалентною, або комплементарною методу конструктора об'єкта. Така можливість відсутня при використанні звичайних просторів імен.
- Модуль повинен мати функцію фіналізації, яка є еквівалентною, або комплементарною методу деструктора об'єкта. Така можливість відсутня при використанні звичайних просторів імен.
- Члени модуля можуть потребувати виконання коду ініціалізації/фіналізації, який виконується за допомогою функції ініціалізації/фіналізації модуля.
- Загалом більша частина членів модуля виконує операції з зовнішніми елементами по відношенню до цього класу, які передаються як аргументи при викликанні функцій. Такі функції являють собою "утиліти", "засоби" або "бібліотеки".
Реалізація
Семантика і синтаксис конкретної мови програмування впливає на спосіб реалізації цього шаблону.
Об'єктно-орієнтовані мови програмування
Java
Хоча мова Java підтримує нотацію просторів імен (namespace), скорочена версія модуля, в деяких випадках можна отримати вигоду від використання шаблону проєктування замість використання просторів імен.
Наступний приклад використовує шаблон проєктування одинак.
Визначення
package consoles; import java.io.InputStream; import java.io.PrintStream; public final class MainModule { private static MainModule singleton = null; public InputStream input = null; public PrintStream output = null; public PrintStream error = null; public MainModule() { // навмисне нічого не робить ! } // ... public static MainModule getSingleton() { if (MainModule.singleton == null) { MainModule.singleton = new MainModule(); } return MainModule.singleton; } // ... public void prepare() { //System.out.println("consoles::prepare();"); this.input = new InputStream(); this.output = new PrintStream(); this.error = new PrintStream(); } public void unprepare() { this.output = null; this.input = null; this.error = null; //System.out.println("consoles::unprepare();"); } // ... public void printNewLine() { System.out.println(); } public void printString(String value) { System.out.print(value); } public void printInteger(int value) { System.out.print(value); } public void printBoolean(boolean value) { System.out.print(value); } public void scanNewLine() { // to-do: ... } public void scanString(String value) { // to-do: ... } public void scanInteger(int value) { // to-do: ... } public void scanBoolean(boolean value) { // to-do: ... } // ... }
Застосування
import consoles; class ConsoleDemo { public static MainModule console = null; public static void prepare() { console = MainModule.getSingleton(); console.prepare(); } public static void unprepare() { console.unprepare(); } public static void execute(String[] args) { console.printString("Hello World"); console.printNewLine(); console.scanNewLine(); } public static void main(String[] args) { prepare(); execute(args); unprepare(); } }
C# (C Sharp .Net)
C#, так само як Java, підтримує простори імен, тим не менш шаблон може бути корисним в деяких випадках.
Наступний приклад використовує шаблон проєктування одинак.
Визначення
using System; namespace Consoles { public sealed class MainModule { public InputStream input = null; public OutputStream output = null; public ErrorStream error = null; private static MainModule Singleton = null; // ... public MainModule () { // навмисне нічого не робить !!! } // ... public static MainModule getSingleton() { if (MainModule.Singleton == null) { MainModule.Singleton = new MainModule(); } return MainModule.Singleton; } // ... public void prepare() { //System.WriteLine("console::prepare();"); this.input = new InputStream(); this.output = new OutputStream(); this.error = new ErrorStream(); } public void unprepare() { this.output = null; this.input = null; this.error = null; //System.WriteLine("console::unprepare();"); } // ... public void printNewLine() { System.Console.WriteLine(""); } public void printString(String Value) { System.Console.Write(Value); } public void printInteger(Int32 Value) { System.Console.Write(Value); } public void printBoolean(Boolean Value) { System.Console.Write(Value); } public void ScanNewLine() { // to-do: ... } public void ScanString(String Value) { // to-do: ... } public void ScanInteger(Int32 Value) { // to-do: ... } public void ScanBoolean(Boolean Value) { // to-do: ... } public void PrintString(String Value) { // to-do: ... } public void PrintNewLine() { // to-do: ... } // ... } }
Застосування
class ConsoleDemo { public static Consoles.MainModule Console = null; public static void prepare() { Console = Consoles.MainModule.getSingleton(); Console.prepare(); } public static void unprepare() { Console.unprepare(); } public static void execute(string[] strings) { Console.PrintString(strings[0]); Console.PrintNewLine(); Console.ScanNewLine(); } public static void Main(string[] args) { prepare(); execute(args); unprepare(); } }
Джерела
- Design Patterns: Elements of Reusable Object-Oriented Software [Архівовано 9 листопада 2012 у Wayback Machine.]
Література
Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Pri rozrobci programnogo zabezpechennya Modul ce shablon proyektuvannya yakij dozvolyaye realizuvati koncepciyu programnih moduliv yaka viznachena v modulnomu programuvanni v movi programuvannya z nepovnoyu pidtrimkoyu ciyeyi koncepciyi Cej shablon mozhe realizovuvatis bagatma sposobami v zalezhnosti vid movi programuvannya dlya yakoyi vin zastosovuyutsya napriklad iz zastosuvannyam shablonu odinak statichnimi chlenami klasu pri ob yektnomu programuvanni i globalnimi funkciyami pri procedurnomu programuvanni Zmist 1 Viznachennya 2 Koncepciya 3 Harakteristiki 4 Realizaciya 4 1 Ob yektno oriyentovani movi programuvannya 4 1 1 Java 4 1 1 1 Viznachennya 4 1 1 2 Zastosuvannya 4 1 2 C C Sharp Net 4 1 2 1 Viznachennya 4 1 2 2 Zastosuvannya 5 Dzherela 6 LiteraturaViznachennyared Shablon proyektuvannya programnogo zabezpechennya modul realizuye vlastivosti i sintaksichnu strukturu viznachenu yak paradigma modulnogo programuvannya pri vikoristanni v movah programuvannya yaki mayut nepovnu pidtrimku ciyeyi koncepciyi Koncepciyared Pri rozrobci programnogo zabezpechennya programnij kod mozhe buti rozdilenij na komponenti yaki realizuyut konkretnu funkciyu abo mistyat use neobhidne dlya virishennya konkretnoyi zadachi Modulne programuvannya ye odnim z pidhodiv realizaciyi cogo Koncepciya modulnosti ne pidtrimuyetsya povnistyu v bagatoh movah programuvannya Harakteristikired Dlya togo shob cej shablon mozhna bulo realizuvati za dopomogoyu shablonu odinaka abo za dopomogoyu inshogo sposobu grupuvannya pov yazanogo kodu neobhidno vikonati nastupni umovi Chastina kodu maye mati globalnu abo publichnu oblast vidimosti i sproyektovana dlya globalnogo publichnogo vikoristannya Dodatkovi prihovani i zahisheni metodi abo kod mozhut vikonuvatis cherez dostup do publichnogo kodu Modul povinen mati funkciyu inicializaciyi yaka ye ekvivalentnoyu abo komplementarnoyu metodu konstruktora ob yekta Taka mozhlivist vidsutnya pri vikoristanni zvichajnih prostoriv imen Modul povinen mati funkciyu finalizaciyi yaka ye ekvivalentnoyu abo komplementarnoyu metodu destruktora ob yekta Taka mozhlivist vidsutnya pri vikoristanni zvichajnih prostoriv imen Chleni modulya mozhut potrebuvati vikonannya kodu inicializaciyi finalizaciyi yakij vikonuyetsya za dopomogoyu funkciyi inicializaciyi finalizaciyi modulya Zagalom bilsha chastina chleniv modulya vikonuye operaciyi z zovnishnimi elementami po vidnoshennyu do cogo klasu yaki peredayutsya yak argumenti pri viklikanni funkcij Taki funkciyi yavlyayut soboyu utiliti zasobi abo biblioteki Realizaciyared Semantika i sintaksis konkretnoyi movi programuvannya vplivaye na sposib realizaciyi cogo shablonu Ob yektno oriyentovani movi programuvannyared Javared Hocha mova Java pidtrimuye notaciyu prostoriv imen namespace skorochena versiya modulya v deyakih vipadkah mozhna otrimati vigodu vid vikoristannya shablonu proyektuvannya zamist vikoristannya prostoriv imen Nastupnij priklad vikoristovuye shablon proyektuvannya odinak Viznachennyared package consoles import java io InputStream import java io PrintStream public final class MainModule private static MainModule singleton null public InputStream input null public PrintStream output null public PrintStream error null public MainModule navmisne nichogo ne robit public static MainModule getSingleton if MainModule singleton null MainModule singleton new MainModule return MainModule singleton public void prepare System out println consoles prepare this input new InputStream this output new PrintStream this error new PrintStream public void unprepare this output null this input null this error null System out println consoles unprepare public void printNewLine System out println public void printString String value System out print value public void printInteger int value System out print value public void printBoolean boolean value System out print value public void scanNewLine to do public void scanString String value to do public void scanInteger int value to do public void scanBoolean boolean value to do Zastosuvannyared import consoles class ConsoleDemo public static MainModule console null public static void prepare console MainModule getSingleton console prepare public static void unprepare console unprepare public static void execute String args console printString Hello World console printNewLine console scanNewLine public static void main String args prepare execute args unprepare C C Sharp Net red C tak samo yak Java pidtrimuye prostori imen tim ne mensh shablon mozhe buti korisnim v deyakih vipadkah Nastupnij priklad vikoristovuye shablon proyektuvannya odinak Viznachennyared using System namespace Consoles public sealed class MainModule public InputStream input null public OutputStream output null public ErrorStream error null private static MainModule Singleton null public MainModule navmisne nichogo ne robit public static MainModule getSingleton if MainModule Singleton null MainModule Singleton new MainModule return MainModule Singleton public void prepare System WriteLine console prepare this input new InputStream this output new OutputStream this error new ErrorStream public void unprepare this output null this input null this error null System WriteLine console unprepare public void printNewLine System Console WriteLine public void printString String Value System Console Write Value public void printInteger Int32 Value System Console Write Value public void printBoolean Boolean Value System Console Write Value public void ScanNewLine to do public void ScanString String Value to do public void ScanInteger Int32 Value to do public void ScanBoolean Boolean Value to do public void PrintString String Value to do public void PrintNewLine to do Zastosuvannyared class ConsoleDemo public static Consoles MainModule Console null public static void prepare Console Consoles MainModule getSingleton Console prepare public static void unprepare Console unprepare public static void execute string strings Console PrintString strings 0 Console PrintNewLine Console ScanNewLine public static void Main string args prepare execute args unprepare Dzherelared Design Patterns Elements of Reusable Object Oriented Software Arhivovano 9 listopada 2012 u Wayback Machine Literaturared Alan Shallouej Dzhejms R Trott Shablony proektirovaniya Novyj podhod k obektno orientirovannomu analizu i proektirovaniyu Design Patterns Explained A New Perspective on Object Oriented Design M Vilyams 2002 288 s ISBN 0 201 71594 5 Otrimano z https uk wikipedia org w index php title Modul shablon proyektuvannya amp oldid 36369015