Մոդուլ (նախագծման ձևանմուշ)

Մոդուլ (անգլ.՝ Module), կառուցվածքային նախագծման ձևանմուշ, որն օգտագործվում է ծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար այն ծրագրավորման լեզուներում, որտեղ այդ հասկացողությունը չի սպասարկվում։

Մոդուլ
ՏեսակԿառուցվածքային
Նշանակությունծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար
Կառուցվածք
Նկարագրությունը ԳօՖի
"Design Patterns" գրքում
Ոչ

Ծրագրավորման լեզվից կախված այս ձևանմուշը կարելի է իրականացնել տարբեր կերպ՝ որպես եզակի օգտագործման ձևանմուշ, օբյեկտ-կողմնորոշված ստատիկ անդամ (անգլ.՝ static member) դասում և պրոցեդուրային գլոբալ ֆունկցիաներում։ Python-ում ձևանմուշը ներկառուցված է լեզվի մեջ և յուրաքանչյուր .py ֆայլը ավտոմատորեն հանդիսանում է մոդուլ։

Ընդհանուր հասկացողություններ խմբագրել

  • Client - հայցող
  • Instance - նմուշ
  • Implementation - իրականացում
  • Product - արգասիք

Նկարագրություն և կառուցվածք խմբագրել

Մոդուլ ձևանմուշը ապահովում է ֆունկցիաներ և ստատիկ կառուցվածքներ մուդուլային հասկացողությունն այն լեզուներում իրականացնելու համար, որոնք չեն սպասարկում այդ հասկացողությունը։

 

Հատկանիշներ խմբագրել

Այս ձևանմուշը եզակի նախագծման կամ այլ խմբի ձևանմուշներով իրականացնելիս պետք է հաշվի առնել, որ ձևանմուշը պետք է ապահովի հետևյալ հատկանիշներին.

  • Ծրագրի կոդի մի մասը պետք է լինի գլոբալ կամ ունենա public հասանելիություն որպես գլոբալ կամ public կոդ։ private կամ protected կոդը կարելի է իրականացնել public կոդի միջոցով։
  • Մոդուլը պետք է ունենա ինիցիալիզադիայի ֆունկցիա, որը համարժեք է օբյեկտ-կնոստրուկտոր մեթոդին։ Այս հատկանիշը չի սպասարկվում ռեգուլյար namespace-ով։
  • Մոդուլը պետք է ունենա finalizer ֆունկցիա, որն համարժեք է օբյեկտի դեստրուկտորին։ Այս ֆունկցիան նույնպես չի սպասարկվում ռեգուլյար namespace-ի կողմից։
  • Ֆունկցիաների շատ անդամենր, որոնք գործողություններ են իրականացնում դասի մեջ, տրվում են ֆունկցիայի կանչի արգումենտների տեսքով։ Նմանատիպ ֆունկցիաներ են օրինակ "utilities", "tools" կամ "libraries":

Օրինակներ խմբագրել

C# (C Sharp .Net) խմբագրել

Հայտարարում խմբագրել

using System;
using System.IO;
using System.Text;

namespace Consoles {

  public sealed class MainModule {
    private static MainModule Singleton = null;
    public InputStream input = null;
    public OutputStream output = null;
    public ErrorStream error = null;

    // ...

    public MainModule () {
      // does nothing on purpose !!!
    }

    // ...

    public 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(Integer 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(Integer Value) {
      // to-do: ...
    }
  
    public void ScanBoolean(Boolean Value) {
      // 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()
    {
      Console.PrintString("Hello World");
      Console.PrintNewLine();
      Console.ScanNewLine();
    }
   
    public static void main()
    {
      prepare();
      execute(args);
      unprepare();
    }
  }

Java խմբագրել

Հայտարարում խմբագրել

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() {
    // does nothing on purpose !!!
  }

  // ...

  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();
  }
}