Modulli programmalastırıw
Modulli programmalastırıw — bul kod bazasınıń funkciyaların ǵárezsiz modullerge shólkemlestiriwge pát beretuǵın programmalastırıw paradigması – hárbiri kompyuter programmasınıń basqa aspektlerin usınbastan onıń pútkil bir aspektin támiyinleydi.
Modul interfeysi modul tárepinen usınılatuǵın hám talap etiletuǵın elementlerdi bildiredi. Interfeyste anıqlanǵan elementler basqa moduller tárepinen anıqlanıwı múmkin. Implementaciya interfeyste járiyalanǵan elementlerge sáykes keletuǵın jumıs kodın óz ishine aladı.
Baylanıslı túsinikler
Modulli programmalastırıw basqa programmalastırıw paradigmalarınan ózgeshelenedi, biraq olar menen baylanıslı, sonıń ishinde:
- Strukturalıq programmalastırıw
- Basqarıw aǵımı ushın salıstırmalı túrde tómengi dárejeli kod strukturaları menen shuǵıllanadı.
- Obyektke baǵdarlanǵan programmalastırıw
- Modulli programmalastırıw sıyaqlı, dekompoziciya arqalı programmalıq támiynat qurılısın ańsatlastırıw menen shuǵıllanadı, biraq jaǵdaydı tiyisli funkciyalıq penen biriktiretuǵın obyektler retinde kodtı shólkemlestiriwge ayrıqsha itibar qaratadı.
- Interfeyske tiykarlanǵan programmalastırıw
- Modullerdi dúziw ushın arxitekturalıq shablon retinde interfeyslerdi qollanıw.
Tariyxı
Modulli programmalastırıw, ishki sistemalar (ásirese kirgiziw/shıǵarıw ushın) hám programmalıq támiynat kitapxanaları túrinde, kodtı qayta paydalanıw ushın qollanılǵan dáslepki programmalıq támiynat sistemalarına barıp taqaladı. Modulli programmalastırıwdıń ózi, modullikti maqset etip, 1960-jıllardıń aqırında hám 1970-jılları, strukturalıq programmalastırıw koncepciyasınıń (1960-jıllar) úlkenirek masshtabtaǵı analogı retinde rawajlandı. «Modulli programmalastırıw» termini keminde Larri Konstantin tárepinen 1968-jılı iyulda Informaciya hám Sistemalar Institutında shólkemlestirilgen Modulli Programmalastırıw Boyınsha Milliy Simpoziumǵa barıp taqaladı; basqa tiykarǵı túsinikler informaciyanı jasırıw (1972) hám máselelerdi ajıratıw (SoC, 1974) boldı.
Moduller ALGOL 68 (1968) dáslepki specifikaciyasına kirgizilmegen, biraq dáslepki implementaciyalarda, ALGOL 68-R (1970) hám ALGOL 68C (1970) keńeytpeler retinde qosılǵan hám keyinirek rásmiylestirilgen[1]. Dáslep modulli programmalastırıw ushın basınan proektlestirilgen birinshi tillerdiń biri Niklaus Virt tárepinen jaratılǵan qısqa ómirli Modula (1975) boldı. Taǵı bir erte modulli til Xerox PARC tárepinen jaratılǵan Mesa (1970-jıllar) boldı, hám Virt keyingi tillerge, ásirese onıń miyrasxorı Modula-3 (1980-jıllar) arqalı tásir etken miyrasxorı Modula-2 (1978) de Mesa-dan da, dáslepki Modula-dan da paydalandı. Modula-nıń M modulinen a obyektine silteme beriw ushın M.a sıyaqlı noqat-kvalifikaciyalanǵan atlardı qollanıwı jazbanıń maydanına kiriw usılına (hám sonday-aq obyektlerdiń atributları yamasa metodlarına) sáykes keledi hám házirgi waqıtta C++, C#, Dart, Go, Java, OCaml hám Python sıyaqlı basqa tillerde keń tarqalǵan. Modulli programmalastırıw 1980-jıllardan baslap keń tarqaldı: dáslepki Pascal tili (1970) modullerdi óz ishine almaǵan, biraq keyingi versiyaları, ásirese UCSD Pascal (1978) hám Turbo Pascal (1983) olardı «birlikler» túrinde qostı, Pascal tásirindegi Ada (1980) da solay boldı. Keńeytilgen Pascal ISO 10206:1990 standartı óziniń modulli qollap-quwatlawında Modula2-ge jaqınıraq boldı. Standard ML (1984) eń tolıq modul sistemalarınıń birine iye, sonıń ishinde moduller arasında salıstırıw ushın funktorlar (parametrlestirilgen moduller) bar.
1980-1990-jıllarda modulli programmalastırıw obyektke baǵdarlanǵan programmalastırıw menen kóleńkede qaldı hám kóbinese shatastırıldı, ásirese C++ hám Javanıń ataqlılıǵı sebepli. Mısalı, C tilleri shańaraǵı C++ (dáslep C with Classes, 1980) hám Objective-C (1983) tillerinde obyektler hám klasslardı qollap-quwatlaǵan, modullerdi tek 30 jıl yamasa onnan da kóp waqıttan keyin ǵana qollap-quwatladı. Java (1995) modullerdi paketler túrinde qollap-quwatlaydı, biraq kodtı shólkemlestiriwdiń tiykarǵı birligi klass bolıp tabıladı. Biraq, Python (1991) basınan baslap modullerdi de, obyektlerdi de ayqın qollandı, modullerdi kodtı shólkemlestiriwdiń tiykarǵı birligi retinde hám «paketlerdi» úlkenirek masshtabtaǵı birlik retinde paydalandı; al Perl 5 (1994) modullerdi de, obyektlerdi de qollap-quwatlawdı óz ishine aladı, CPAN (1993) arqalı keń kólemli moduller qoljetimli. OCaml (1996) ML-ge erip, modullerdi hám funktorlardı qollap-quwatladı.
Modulli programmalastırıw házirgi waqıtta keń tarqalǵan hám 1990-jıllardan berli islep shıǵılǵan barlıq derlik tiykarǵı tillerde ushırasadı. Modullerdiń salıstırmalı áhmiyeti tiller arasında ózgeredi hám klassqa tiykarlanǵan obyektke baǵdarlanǵan tillerde shólkemlestiriw hám inkapsulyaciya birligi retinde klasslar menen ele de qabatlasıw hám shatasıwlar bar, biraq bul ekewi de anıq túsinikler retinde jaqsı ornalasqan.
Terminologiya
Geyde modul ornına assembly (C#, F# yamasa Visual Basic sıyaqlı .NET tillerindegi) yamasa package (Dart, Go yamasa Java tillerindegi sıyaqlı) termini qollanıladı. Basqa implementaciyalarda olar bólek túsinikler; Pythonda paket — bul moduller jıynaǵı, al Java 9-da jańa modul koncepciyası, keńeytilgen kiriw basqarıwı bar paketler jıynaǵın óz ishine alǵan Java Platforma Modul Sisteması engizildi. (Bul paketler programmalıq támiynattaǵı basqa túrdegi paketler, mısalı paket menedjeri paketleri menen birdey emes.)
Java tilinde package termini Java tili specifikaciyasında modul koncepciyası ushın qollanıladı[2]. Paketler jıynaǵınıń bir túri bolǵan modul Java 9-da kirgizilgen.
Ayırım Pascal dialektlerinde unit termini modul koncepciyası ushın qollanıladı.
Komponent — bul uqsas koncepciya, biraq ádette joqarı dárejeni bildiredi; komponent — bul pútkil sistemanıń bir bólegi, al modul — bul jeke programmanıń bir bólegi. «Modul» termininiń masshtabı tiller arasında aytarlıqtay ózgeredi; Pythonda ol júdá kishi masshtablı hám hárbir fayl — bul modul, al Java 9-da ol úlken masshtablı, ol jerde modul — bul paketler jıynaǵı, olar óz gezeginde fayllar jıynaǵı bolıp tabıladı.
Til qollawı
Modul koncepciyasın formal túrde qollap-quwatlaytuǵın tillerge Ada, ALGOL, BlitzMax, C++, C#, Clojure, COBOL, Common Lisp, D, Dart, eC, Erlang, Elixir, Elm, F, F#, Fortran, Go, Haskell, IBM/360 Assembler, IBM System/38 hám AS/400 Control Language (CL), IBM RPG, Java, Julia, MATLAB, ML, Modula, Modula-2, Modula-3, Morpho, NEWP, Oberon, Oberon-2, Objective-C, OCaml, bir neshe Pascal miyrasxorları (Component Pascal, Object Pascal, Turbo Pascal, UCSD Pascal), Perl, PHP, PL/I, PureBasic, Python, R, Ruby,[3] Rust, JavaScript, Visual Basic (.NET) hám WebDNA kiredi.
Modullerdi qollap-quwatlamaytuǵın kózge túsetuǵın tillerge C hám dáslepki formalarında C++ hám Pascal kiredi. C hám C++ bolsa da, bólek kompilyaciyaǵa hám header faylların qollanıp deklarativ interfeyslerdi belgilewge múmkinshilik beredi, bul ádette modullestiriw dep esaplanadı. Moduller iOS 7-de (2013) Objective-C-ge qosıldı; C++20 menen C++-ge,[4] hám Pascal basınan modullerdi óz ishine alǵan Modula hám Oberon menen almastırıldı, hám modullerdi óz ishine alǵan hár túrli miyrasxorları payda boldı. JavaScript ECMAScript 2015-ten berli jergilikli modullerge iye. C++ modulleri header faylları menen keri sáykeslikke múmkinshilik berdi («header units»). C dialektleri modullerge múmkinshilik beredi, mısalı Clang C tili ushın modullerdi qollap-quwatlaydı,[5] biraq Clang C modulleriniń sintaksisi hám semantikası C++ modullerinen ayırmashılıq etedi.
Modulli programmalastırıw, programmalastırıw tilinde atalǵan modullerdi qollap-quwatlaw ushın anıq sintaksislik ózgeshelikler bolmasa da, mısalı, C tilinde orınlanıwı múmkin. Bul bar bolǵan til ózgesheliklerin, mısalı, kodlaw konvenciyaları, programmalastırıw idiomaları hám fizikalıq kod strukturası menen birge paydalanıw arqalı ámelge asırıladı. IBM i sonday-aq Integraciyalanǵan Til Ortalıǵında (ILE) programmalastırǵanda modullerdi qollanadı.
Tiykarǵı aspektler
Modulli programmalastırıw menen máseleler jaqsı anıqlanǵan interfeysler arqalı óz-ara tásir etetuǵın logikalıq bólek funkciyalardı orınlaytuǵın modullerge bólingen. Kóbinese moduller baǵdarlanǵan aciklikli graf (DAG) quraydı; bul jaǵdayda moduller arasındaǵı ciklik ǵárezlilik olardıń bir modul bolıwı kerekligin kórsetedi dep qaraladı. Moduller DAG quraytuǵın jaǵdayda olardı ierarxiya retinde jaylastırıwǵa boladı, bunda eń tómengi dárejeli moduller ǵárezsiz bolıp, basqa modullerge baylanıslı emes, al joqarı dárejeli moduller tómengi dárejelilerge baylanıslı. Belgili bir programma yamasa kitapxana óz ierarxiyasınıń joqarı dárejeli moduli bolıp tabıladı, biraq óz gezeginde joqarı dárejeli programma, kitapxana yamasa sistemanıń tómengi dárejeli moduli retinde de qaralıwı múmkin.
Modulli sistema jaratqanda, monolitli qosımsha (eń kishi komponenti pútkil bolǵan) jaratıw ornına, bir neshe kishirek moduller bólek jazıladı, solay etip olar birge qosılǵanda orınlanatuǵın qosımsha programmanı quraydı. Ádette, olar sonday-aq bólek kompilyaciya arqalı bólek kompilyaciyalanadı, sońınan linker arqalı baylanıstırıladı. Júst-in-time kompilyatorı bul qurılıstıń bir bólegin orınlanıw waqtında «ushıp baratırıp» orınlawı múmkin.
Bul ǵárezsiz funkciyalar ádette programma basqarıw funkciyaları yamasa arnawlı wazıypa funkciyaları retinde klassifikaciyalanadı. Programmanı basqarıw funkciyaları bir programma ushın islewge arnalǵan. Arnawlı wazıypa funkciyaları hár túrli programmalar ushın qollanıwǵa jaqın etip tayarlanǵan.
Bul modulli proektlestirilgen sistemalardı, eger durıs qurılsa, dástúrli monolitli dizaynǵa qaraǵanda ádewir qayta paydalanıwǵa bolatuǵın etedi, sebebi bul modullerdiń barlıǵı (yamasa kópshiligi) basqa proektlerde (ózgerissiz) qayta paydalanılıwı múmkin. Bul sonday-aq proektlerdi bir neshe kishirek proektlerge «bóliwdi» ańsatlastıradı. Teoriyalıq jaqtan, modullestirilgen programmalıq támiynat proekti úlken komandalar tárepinen ańsatıraq jıynaladı, sebebi hesh bir topar aǵzası pútkil sistemanı dúzbeydi yamasa hátte pútkil sistema haqqında biliwi de kerek emes. Olar tek tayınlanǵan kishirek wazıypaǵa itibar qarata aladı.
Derekler
- ↑ Lindsey, Charles H. (Feb 1976). "Proposal for a Modules Facility in ALGOL 68". ALGOL Bulletin (39): 20–29. http://archive.computerhistory.org/resources/text/algol/ACM_Algol_bulletin/1061719/p19-lindsey.pdf. Retrieved 2014-12-01.
- ↑ ; Bill Joy; Guy Steele; Gilad BrachaThe Java Language Specification, Third Edition, 2005. ISBN 0-321-24678-0. In the Introduction, it is stated "Chapter 7 describes the structure of a program, which is organized into packages similar to the modules of Modula." The word module has no special meaning in Java.
- ↑ «class Module - Documentation for Ruby 3.5».
- ↑ «N4720: Working Draft, Extensions to C++ for Modules».
- ↑ «Modules». clang.llvm.org.