Djeksonnıń strukturalıq programmalastırıwı

**Djeksonnıń strukturalıq programmalastırıwı (JSP)** — bul britaniyalı programmalıq támiynat boyınsha keńesshisi Maykl A. Djekson tárepinen islep shıǵılǵan strukturalıq programmalastırıw usılı. Ol óziniń 1975-jılǵı «Programma Dizaynınıń Principleri» kitabında táriyiplengen. JSP usılınıń texnikası — programmanıń kirgiziw retinde oqıwı hám shıǵarıw retinde payda etiwi kerek bolǵan fayllardıń maǵlıwmatlar strukturaların analizlew hám sońınan sol maǵlıwmatlar strukturalarına tiykarlanǵan programma dizaynın payda etiw, solay etip programma basqarıw strukturası sol maǵlıwmatlar strukturaların tábiyiy hám intuitiv usılda qayta isleydi.

JSP strukturalardı (maǵlıwmatlardıń da, programmalardıń da) úsh tiykarǵı strukturanı — izbe-izlikti, iteraciyanı hám tańlawdı (yamasa alternativanı) paydalanıp táriyipleydi. Bul strukturalar diagramma túrinde kórsetiledi (negizinde turaqlı ańlatpanıń vizual kórinisi).

## Kirisiw
Maykl A. Djekson JSP-di dáslep 1970-jılları islep shıqqan. Ol bul sistemanı óziniń 1975-jılǵı «Programma Dizaynınıń Principleri» kitabında hújjetlestirgen. 2001-jılǵı konferenciya bayanatında, ol bul usıldıń dáslepki háreketlendiriwshi kúshlerine retrospektiv analiz berdi hám onı keyingi programmalıq támiynat injenerligi rawajlanıwları menen baylanıstırdı. Djeksonnıń maqseti COBOL paketti qayta islew programmaların ózgertiwdi hám qollap-quwatlawdı ańsatlastırıw edi, biraq bul usıldı strukturalıq basqarıw konstrukciyaları — izbe-izlik, iteraciya hám tańlaw («if/then/else») bar bolǵan hár qanday programmalastırıw tili ushın programmalar dizaynlawda paydalanıwǵa boladı.

Djeksonnıń Strukturalıq Programmalastırıwı Varnier/Orr strukturalıq programmalastırıwına uqsas edi, degen menen JSP kirgiziw hám shıǵarıw maǵlıwmat strukturaların da esapqa alǵan, al Varnier/Orr usılı derlik tek shıǵarıw aǵımınıń strukturasına itibar bergen.

## Metodtıń motivaciyası
JSP islep shıǵılǵan waqıtta, kópshilik programmalar lentada saqlanǵan izbe-iz fayllardı qayta isleytuǵın COBOL paketli programmaları edi. Tipik programma óziniń kirgiziw faylın jazıwlar izbe-izligi retinde oqıp shıǵatuǵın edi, sonlıqtan barlıq programmalardıń strukturası birdey edi — fayldaǵı barlıq jazıwlardı birme-bir qayta isleytuǵın bir tiykarǵı cikl. Djeksonnıń bul programma strukturası derlik bárqulla nadurıs ekenin tastıyıqladı hám baǵdarlamashılardı quramalıraq maǵlıwmat strukturaların izlewge shaqırdı. «Programma Dizaynınıń Principleri» kitabınıń 3-babında Djeksonnıń bir programmanıń eki versiyasın usınadı, biri JSP járdeminde proektlestirilgen, ekinshisi dástúrli bir ciklli strukturanı paydalanǵan. Tómende onıń mısalı COBOL-dan Java-ǵa awdarılǵan. Bul eki programmanıń maqseti — sortlanǵan fayldaǵı qaytalanatuǵın jazıwlar (qatarlar) toparların tanıw hám hárbir jazıw hám onıń faylda neshe ret ushırasatuǵının kórsetetuǵın shıǵarıw faylın payda etiw.

Tómende programmanıń dástúrli, bir ciklli versiyası keltirilgen.
```java
String line;
int count = 0;
String firstLineOfGroup = null;

// begin single main loop
while ((line = in.readLine()) != null) {
    if (firstLineOfGroup == null || !line.equals(firstLineOfGroup)) {
        if (firstLineOfGroup != null) {
            System.out.println(firstLineOfGroup + " " + count);
        }
        count = 0;
        firstLineOfGroup = line;
    }
    count++;
}
if (firstLineOfGroup != null) {
    System.out.println(firstLineOfGroup + " " + count);
}
```
Tómende sol programmanıń JSP-stilindegi versiyası keltirilgen. Itibar beriń, ol (dástúrli programmadan ayırmashılıǵı) eki ciklge iye, biri ekinshisiniń ishinde jaylasqan. Sırtqı cikl qaytalanatuǵın jazıwlar toparların qayta isleydi, al ishki cikl topar ishindegi jeke jazıwlardı qayta isleydi.
```java
String line;
int numberOfLinesInGroup;

line = in.readLine();
// begin outer loop: process 1 group
while (line != null) {  
    numberOfLinesInGroup = 0;
    String firstLineOfGroup = line;

    // begin inner loop: process 1 record in the group
    while (line != null && line.equals(firstLineOfGroup)) {
        numberOfLinesInGroup++;
        line = in.readLine();
    }
    System.out.println(firstLineOfGroup + " " + numberOfLinesInGroup);
}
```
Djeksonnıń dástúrli bir ciklli versiyanı kirgiziw faylınıń strukturasın (qaytalanatuǵın jazıwları bar toparlar izbe-izligi) tábiyiy usılda qayta islewde sátsizlikke ushıraǵanı ushın sınǵa aladı. Onıń tábiyiy emes dizaynınıń bir belgisi — durıs islew ushın, ol fayldıń birinshi hám sońǵı jazıwın qayta islew ushın arnawlı kod qosıwǵa májbúr boladı.

## Tiykarǵı metod
JSP programmanıń kirgiziwleri menen shıǵarıwlarınıń bar strukturasın programmanıń óziniń strukturasında sáwlelendiriw ushın yarım-formal adımlardı qollanadı.

Maqset — ómir dawamında ózgertiw ańsat bolǵan programmalar jaratıw. Djeksonnıń tiykarǵı túsinigi — talap ózgerisleri ádette bar strukturalarǵa kishi ózgerisler bolıp tabıladı. JSP qollanıp dúzilgen programma ushın kirgiziwler, shıǵarıwlar hám programmanıń ishki strukturaları hámmesi sáykes keledi, sonlıqtan kirgiziwler menen shıǵarıwlarǵa kishi ózgerisler programmaǵa da kishi ózgerislerge alıp keliwi kerek.

JSP programmalardı tórt komponent túri boyınsha strukturalaydı:

* irgeli operaciyalar
* dizbekler
* iteraciyalar
* tańlawlar

Metod programmanıń kirgiziwlerin tórt tiykarǵı komponent túri boyınsha táriyiplew menen baslanadı. Sońınan ol programmanıń shıǵarıwların da sol usılda táriyiplewdi dawam etedi. Hárbir kirgiziw hám shıǵarıw bólek Maǵlıwmat Strukturası Diagramması (DSD) retinde modellestiriledi. JSP-di cifrlı signallardı qayta islew (DSP) sıyaqlı esaplawǵa intensiv qosımshalar ushın islewge keltiriw ushın, sonday-aq kirgiziw hám shıǵarıwǵa emes, al ishki maǵlıwmat strukturalarına itibar beretuǵın algoritm struktura diagrammaların sızıw da zárúr.

Kirgiziw hám shıǵarıw strukturaları sońınan Programma Strukturası Diagramması (PSD) dep atalatuǵın aqırǵı programma strukturasına biriktiriledi yamasa birlesedi. Bul adım kirgiziwler menen shıǵarıwlardı biriktiriw ushın joqarı dárejeli basqarıw strukturasınıń az muǵdarın qosıwdı óz ishine alıwı múmkin. Geypara programmalar barlıq kirgiziwdi qayta islegennen keyin ǵana hár qanday shıǵarıw islep shıǵaradı, al basqaları bir jazıw oqıydı, bir jazıw jazadı hám qaytalanadı. Bunday usıllar PSD-de sáwlelendiriwi kerek.

Tilge neytral bolǵan PSD sońınan programmalastırıw tilinde ámelge asırıladı. JSP basqarıw strukturaları dárejesinde programmalastırıwǵa baǵdarlanǵan, sonlıqtan ámelge asırılǵan dizaynlar tek ápiwayı operaciyalar, izbe-izlikler, iteraciyalar hám tańlawlardı qollanadı. JSP klaslar hám obyektler dárejesinde programmalardı strukturalaw ushın paydalanılmaydı, degen menen ol klastıń metodları ishinde basqarıw aǵımın strukturalawǵa paydalı bolıwı múmkin.

JSP kirgiziwlerdiń, shıǵarıwlardıń hám programmalardıń strukturasın táriyiplew ushın diagramma belgilewin paydalanadı, bunda tórt tiykarǵı komponent túriniń hárbiri ushın diagramma elementleri bar.

Ápiwayı operaciya qutı retinde sızıladı.

Operaciya

Operaciyalar izbe-izligi sızıqlar menen baylanıstırılǵan qutılar menen kórsetiledi. Tómendegi mısalda, A — bul B, C hám D operaciyalarınan ibarat izbe-izlik.

Izbe-izlik

Iteraciya jáne biriktirilgen qutılar menen kórsetiledi. Bunnan tısqarı, iteraciyalanǵan operaciyanıń qutısınıń joqarı oń múyeshinde juldızsha bar. Tómendegi mısalda, A — bul B operaciyasınıń nol yamasa onnan kóp shaqırılıwlarınıń iteraciyası.

Iteraciya

Tańlaw izbe-izlikke uqsas, biraq hárbir qosımsha operaciyanıń joqarı oń múyeshinde sheńber sızılǵan. Mısalda, A — bul B, C yamasa D operaciyalarınıń tek biriniń tańlanıwı.

Tańlaw

Esletpe: joqarıdaǵı diagrammalarda izbe-izlik yamasa iteraciya bolǵan element A elementi, B, C yamasa D elementleri emes (olar joqarıdaǵı diagrammalarda hámmesi ápiwayı). Djeksonnıń elementtiń ne ekenin anıqlaw ushın «Tómenge qarań qaǵıydasın» usınadı, yaǵnıy onıń ne ekenin anıqlaw ushın elementtiń astındaǵı elementlerge qarań.

## Derekler

__BÖLİDİMÖNDEMEW__