Кіріспе

Мінез-құлықтық жобалау үлгісі

Объектіге бағытталған бағдарламалауда команда үлгісі – бұл мінез-құлықтық жобалау үлгісі, онда объект әрекетті орындау немесе кейінірек оқиғаны іске қосу үшін қажетті барлық ақпаратты қамтиды. Бұл ақпаратқа әдістің атауы, әдіске ие объект және әдіс параметрлерінің мәндері кіреді. Команда үлгісімен байланысты төрт маңызды термин – команда, қабылдаушы, шақырушы және клиент. Команда объектісі қабылдаушы туралы біледі және қабылдаушының әдісін шақырады. Қабылдаушы әдісінің параметрлерінің мәндері командада сақталады. Бұл әдістерді орындау үшін қабылдаушы объекті де команда объектісінде агрегация арқылы сақталады. Содан кейін қабылдаушы командадағы execute әдісі шақырылған кезде жұмысты орындайды. Шақырушы объекті команданы қалай орындау керектігін біледі және команданың орындалуы туралы есеп жүргізе алады. Шақырушы нақты команда туралы ештеңе білмейді, ол тек команда интерфейсін біледі. Шақырушы объектілері, команда объектілері және қабылдаушы объектілері клиент объектісінде сақталады, клиент команда объектілеріне қандай қабылдаушы объектілерін тағайындауын және шақырушыға қандай командаларды тағайындауын шешеді. Клиент командаларды қай уақытта орындауға болатынын шешеді. Команданы орындау үшін ол команда объектісін шақырушы объектіге жібереді. Команда объектілерін пайдалану әдістің класын немесе әдіс параметрлерін білудің қажеті жоқ, әдіс шақыруларын өздері таңдаған уақытта беруді, реттілігін немесе орындауды қажет ететін жалпы компоненттерді құруды жеңілдетеді. Шақырушы объектіні пайдалану командаларды орындау туралы есепті ыңғайлы түрде жүргізуге мүмкіндік береді, сондай-ақ клиенттің есепті немесе режимдерді білуіне қажеттіліксіз, шақырушы объектісімен басқарылатын командалар үшін әртүрлі режимдерді іске асыруға мүмкіндік береді. Бұл жобалау үлгісінің негізгі идеялары функционалдық бағдарламалау тілдеріндегі бірінші сыныптық функциялар мен жоғары деңгейдегі функциялар семантикасын жақын көрсетеді. Нақты айтқанда, шақырушы объекті – бұл команда объектісінің бірінші сынып аргументі болып табылатын жоғары деңгейдегі функция.

Терминология

Командалық үлгіні іске асыруды сипаттау үшін қолданылатын терминология тұрақты емес және осыдан келіп шатасу тудыруы мүмкін. Бұл екіұштылықтың, синонимдерді пайдаланудың және түпкілікті үлгіден асып, оны жасыра алатын іске асырулардың нәтижесі. Екіұштылық. "Команда" термині екіұшты. Мысалы, "жоғары жылжу, жоғары жылжу" бір "жоғары жылжу" командасын екі рет орындауды білдіруі мүмкін, немесе бірдей нәрсе ("жоғары жылжу") жасайтын екі команданы білдіруі мүмкін. Егер бұрынғы команда кері қайтару стегіне екі рет қосылса, стектегі екі элемент те бір команда мысалына сілтеме жасайды. Бұл команда әрқашан бірдей тәсілмен кері қайтарыла алатын жағдайда орынды болуы мүмкін (мысалы, төмен жылжу). "Төрттік" және төмендегі Java мысалы "команда" терминінің осы түсіндірмесін қолданады. Екінші жағынан, егер соңғы командалар кері қайтару стегіне қосылса, стек екі бөлек нысанға сілтеме жасайды. Бұл жағдайда стектегі әрбір нысан команданы кері қайтаруға қажетті ақпаратты қамтуы тиіс. Мысалы, "таңдауды жою" командасын кері қайтару үшін нысан жойылған мәтіннің көшірмесін қамтуы мүмкін, егер "таңдауды жою" командасын кері қайтару қажет болса. Команданың әр шақырылуы үшін жеке нысанды пайдалану да "жауапкершілік тізбегі" үлгісінің мысалы болып табылады. "Орындау" термині де екіұшты. Бұл командалық нысанның "орындау" әдісімен анықталған кодты орындауды білдіруі мүмкін. Алайда, Microsoft-тың Windows Presentation Foundation (WPF) жүйесінде команданың "орындау" әдісі шақырылғанда орындалған деп есептеледі, бірақ бұл міндетті түрде бағдарламалық кодтың орындалғанын білдірмейді. Бұл тек кейбір қосымша оқиғаларды өңдеуден кейін ғана болады. Синонимдер мен омонимдер. Клиент, Көз, Шақырушы: батырма, құралдар панелі батырмасы немесе мәзір элементі, пайдаланушы басып тұрған перне тіркесімі. Командалық нысан, бағытталған командалық нысан, Іс-қимыл нысаны: командамен байланысты қысқару пернелері, батырмалар бейнелері, команда мәтіні және т.б. туралы білетін бір нысан (мысалы, CopyCommand нысаны бар). Көз немесе шақырушы нысаны Команда немесе Іс-қимыл нысанының "орындау" немесе "performAction" әдісін шақырады. Командалық/Іс-қимыл нысаны команданың/іс-қимылдың қолжетімділігі өзгерген кезде тиісті көзді/шақырушы нысандарды хабардар етеді. Бұл батырмалар мен мәзір элементтерін команда/іс-қимыл орындалмаса/орындалмаса әрекетсіз (сұр түске боялған) болуға мүмкіндік береді. Қабылдаушы, Мақсатты нысан: көшірілетін, жабыстырылатын, жылжытылатын және т.б. нысан. Қабылдаушы нысан команданың "орындау" әдісімен шақырылатын әдіске ие. Қабылдаушы әдетте мақсатты нысан болып табылады. Мысалы, егер қабылдаушы нысан курсор болса және әдіс "moveUp" деп аталса, онда курсор "moveUp" әрекетінің нысаны болады деп күтіледі. Екінші жағынан, егер кодты команданың өзі анықтаса, онда мақсатты нысан мүлдем басқа нысан болады. Командалық нысан, бағытталған оқиға аргументтері, оқиға нысаны: бастапқыдан командалық/іс-қимыл нысанына, мақсатты нысанға, жұмысты орындайтын кодқа берілетін нысан. Әрбір батырманы басу немесе перне тіркесімін пайдалану жаңа команда/оқиға нысанын тудырады. Кейбір іске асырулар команда/оқиға нысанына бір нысаннан (мысалы, CopyCommand) екіншісіне (мысалы, құжат бөліміне) беріліп жатқанда қосымша ақпарат қосады. Басқа іске асырулар команда/оқиға нысандарын басқа оқиға нысандарына (үлкен қораптың ішіндегі қорап сияқты) атау қақтығыстарын болдырмау үшін сызық бойымен қозғалғанда орналастырады. (Сондай-ақ "жауапкершілік тізбегі" үлгісін қараңыз.) Өңдеуші, ExecutedRoutedEventHandler, әдіс, функция: көшіруді, орналастыруды, жылжытуды және т.б. жүзеге асыратын нақты код. Кейбір іске асыруларда өңдеуші код команда/іс-қимыл нысанының бөлігі болып табылады. Басқа іске асыруларда код қабылдаушы/мақсатты нысанның бөлігі болып табылады, ал басқа іске асыруларда өңдеуші код басқа нысандардан бөлек сақталады. Команда менеджері, Кері қайтару менеджері, Жоспарлаушы, Кезек, Диспетчер, Шақырушы: команда/оқиға нысандарын кері қайтару стегіне немесе қайталау стегіне қоятын, басқа нысандар оларға әрекет етуге дайын болғанға дейін команда/оқиға нысандарын ұстайтын немесе команда/оқиға нысандарын тиісті қабылдаушы/мақсатты нысанға немесе өңдеуші кодқа бағыттайтын нысан. Бұл іске асыру бастапқы командалық үлгіден әлдеқайда асып түседі. Microsoft-тың Windows Presentation Foundation (WPF) жүйесі командалық үлгіні оқиғаларды өңдеумен біріктіретін бағытталған командаларды енгізеді. Нәтижесінде командалық нысан енді мақсатты нысанға немесе бағдарламалық кодқа сілтеме қамтымайды. Оның орнына командалық нысанның "орындау" командасын шақыру "орындалған бағытталған оқиғаны" тудырады, ол оқиғаның "тоннельдеуі" немесе "көпірленуі" кезінде мақсатты және бағдарламалық кодты анықтайтын "байланыс нысанымен" кездесуі мүмкін, ол сол кезде орындалады.

Тарих

Интерактивті жүйелерді іске асыру үшін Command класын қолдану туралы алғашқы жарияланған мәлімет Генри Либерманның 1985 жылғы мақаласында кездеседі. Command класын execute және undo әдістерімен, сондай-ақ тарих тізімімен пайдалана отырып, (көп деңгейлі) кері қайтару механизмінің алғашқы жарияланған сипаттамасы – Бертран Мейердің "Объектіге бағытталған бағдарламалық құрылым" кітабының 1988 жылғы бірінші басылымындағы 12.2-бөлімде келтірілген.