4.10. КЕЙС-ӘДІС
Бұл бөлімде біз қазіргі заманғы программалау тілдерін бірнешеуін қа-
растырып және олар қолдайтын абстракцияларды талқылауда. Бұл та-
рауда талқыланатын абстракцияны барлық емес, барлық бірдей тілдер
қолдамайтынын атап өткен жөн. Қарапайым мысал ретінде ADA 2012,
C++, C#, Fortran 2009, Java, Modula-3, Ruby, и Scala. ADA тілдерін алай-
ықғ олар- объектілер мен модульдер бірге, аманатты бағдарламалау
стилін қолдайтын бай тіл. Fortran 2009 объектілерін тұжырымдамасын
қолдайтын құрылымдық зерттеу құрылғымен күттірмес бағдарламалау
тілі болып табылады. C ++ - императивтік және объектілі программа-
лау комбинациясы. Java, сондай-ақ императивтік және объектілі-бағдар-
ланған бағдарламалау парадигмасын қолдайды. Lisp абстракцияның
бай деректерді басқару және императивті бағдарламалау стилі шектеулі
мөлшерде бірге, функционалдық бағдарламалау парадигмасын қолдай-
ды. Modula-3 анық бағдарламалау модульдерді, сондай-ақ, объектілі
программалауды қолдайды. Ruby кешенді функционалдық және объ-
210
ектілі программалау парадигмасын қолдап, сынып модульдер ұғымдар
біріктіреді.
Scala – ол функционалды және бағдарламалау парадигмасы интеграл-
дайтын қазіргі мультипарадигмалдық тілі. Логикалық бағдарламалау
тілін білдіретін Prolog тілі бұл тізімге қосылмайды, себебі ол ЖӘНЕ-НЕ-
МЕСЕ деген бірігу және агаш сияқты көптеген тұжырымдамаларды та-
лап етеді. Бұл басқа тілдердегі сабстракциялардан ерекшеленеді және
10 тарауда егжей-тегжейлі қаралады.
4.10.1 Бағдарламалау тіліндегі мәліметтер абстаркциясы
Қазіргі бағдарламалау тілдерінде көптеген деректер абстракциясы жиі
кездеседі. Барлық дерлік қазіргі заманғы тілдер күрделі түрлерін, жиын-
дарын және кеңейтілетін деректер құрылымын қолдайды. Декларативтік
және императивтік бағдарламаларын қолдайтын мультипарадигмалы
тілдер нысандардың екі түрін сақтай отырып, өтпелі және мызғымас
нысандарды саралайды. Айнымалы нысандар жою болатындай жаңар-
тыла алады және мызғымас нысандар меншік бір рет тағайындауды қол-
дайды.
4.10.1.1 Бірыңғай Абстракция
Математикалық әлемнен шығатын бүтін сан, логикалық өрнек ретінде,
нақты саны мен симболдық сияқты бір объектілер өте кең таралған.
ADA, Pascal, Modula, С және С++ сияқты көптеген тілдерде пайдала-
нушы есептік айқындай алады. Дегенмен, көптеген Modula 2 мұрагері
Oberon – нан шоттық жойылды. Поддиапазон хабарламасы мен оның
массивткарда падалануы ADA, Fortran, ALGOL, Pascal, Modula-2 де
стандартты болып саналады. Алайда, түрі тобы байланысты объектінің
шектеулі пайдалану C, C ++ және Оберона жойылады, ал массивтің
төменгі шекара үшін «0.» орнатылған. Енгізу түрі Pascal, Modula-2 де
және Scala-ның соңғы шыққан нұсқасында қолданылады. Алайда, бұл
бағдарламашылары шектеулі пайдалану салдарынан бағдарламалау
жиынтығы негізінде коммерциялық бағдарламалық қамтамасыз етуді
әзірлеу кезінде көптеген тілдерде бекітілген жоқ. Төменде Modula-2
синтаксис орнату түрі үлгісі келтірілген:
Type week = (Mon, Tue, Wed, Thu, Fri, Sat, Sun)
Var workdays: set of week;
Аптаны көрсетудің бірінші түрі жарияланды. Айнымалы түрі тыны-
сымен апта ретінде жарияланды. Айнымалы уақыт аптаның тиісті ішкі
211
жиыны болып табылатын кез келген мәнді, қабылдай алады.
Scala жинақты жасау үшін сақтаулы сөз «орнатылған» пайдаланады.
Мысалы, негізгі айнымалы = Set тұжырымдамасы ( «нұсқаулық сег-
ментін тіркеу», «Математика», «Қаржы») үш элементтен жиынтығы
ретінде жасайды.
ADA мысалында көрсетілгендей аудару түрі, сондай-ақ, ауқымы болуы
мүмкін:
Type week is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
Type year is 1..12;
Subtype weekend is week range Sat..Sun;
Subtype workingdays is week range Mon..Fri;
Subtype fall_semester is year 8..12
Subtype summer is year 6..8
Ada, сондай-ақ бастапқы түріне барлық қасиеттерін иеленеді қосалқы
түрін қолдайды, және 7-тарау егжей-тегжейлі талқыланды. Oberon
қысқа бүтін арифметикалық бүтін ⊆ ⊆ ұзын бүтін ⊆ ⊆ барлық нақты
бірнеше түрлерін енгізу арқылы Modula-2 жүйесі түрлерін кеңейтеді.
Енгізілген түрдің мәнін түрін қоса алғанда айнымалы түрін қоса беруге
болады. Мысалы, егер N - бүтін, және М ұзын бүтін болса, ддұрысы М
= Н болады. Бұл шын мәнінде, тарауда сипатталғандай 7, мысал болып
табылады.
Scala немесе оның кеңейтілген нұсқасы Escala, функционалдық бағдар-
ламалау интеграцияны қолдайтын қазіргі заманғы мултипарадигмалқ
тіл, ол объектілі программалау және (Escala қолдау) оқиға-бағдарланған
бағдарламалау негізінде, бүтін және логикалық білдіру сияқты негізгі
түрлерін қолдайды. Сондай-ақ, ол жарнама жолды өңдейді.
Абстракцияның кезекті бірлігіне қосқанда, көптеген тілдер 8-тарау
талқыланатын мониторлар, сопрограммы және семафоров сияқты па-
раллель орындау үшін қажетті түрлерін қолдайды.
4.10.1.2 Құрамалы абстракция
Кортеждер құрамдас объектілер болып табылады.
Аталған кортеждер Algol, С және С ++ тілдерінде «құрылым» деп ата-
лады, және осындай ADA, Pascal және Module отбасы тілдерінде «жаз-
ба» деп аталады.
"Структ" С++ тілдерінде сақталып қойған «struct» деп жазылады және
содан кейін атауы ал одан кейін түрлі құрылымдар жүреді. Өріс тобы сол
және оң жақ мүсінді жақша жатыр. Атауы, факультеті, дәрежесі: үш өрі-
стерді бар студент жазуын мысалын алыңыз. Барлық үш жолдың өріс
212
десек, C ++ тілінде компонент абстракциясы төмендегідей «құрылымы»
болып табылады :
онда char * таңбалардың жиымын белгілеу үшін пайдаланылады.
Бұл дегеніңіз жоғарыдағы атауында таңбалардың алабына көрсететін
сілтеме болып табылады. Сол сияқты, факультет таңбалардың алабына
меңзегіш сілтеме болып табылады. Бағдар жад алабының бірінші орын-
нын көрсетеді.
Кортежді төмендегідей студенті түрі айнымалыны көмегімен арнайы
кортеж мәндерінің байланысу арқылы инициалиялауға болады:
student plstudent = {“John”, “Computer Science”, “BS”};
ADA аталған кортежді " жазу" пайдалана отырып ұсынды:
Түрі басқа түрдегі ұйғарымда пайдаланушының қалауы бойынша пай-
далануға болады. Мысалы, студент жазбалар келесі анықтамасын да-
лалық жыл қосу арқылы түлегі енген жаңа анықтамасына ұзартылуы
мүмкін.
Ұлғаймалы өріс қосу жолымен айқындау мынадай айқындама жоқ жаз-
ба жазу мүмкін например студент түлек шығарылған жылы. Oberon
үшін ол төмендегідей жазуға тең болады:
student = RECORD
name: ARRAY 30 of CHAR;
department: ARRAY 20 of CHAR;
degree: ARRAY 20 of CHAR;
END
alumni = RECORD
person: student;
213
graduationYear: INTEGER;
END
ADA, Pascal сияқты көптеген тілдер мен Modula 2 нұсқалы жазуды
қолдайды. Нұсқалы жазба құрамдас құрылым болып табылады, ол екі
бөліктен тұрады: тұрақты бөлік және айнымалы бөлік. Топтың айны-
малы бөлігі еске сол алқапта орналастыру мүмкін өзара ерекше өрістер
болып табылады. Нұсқалы жазба нөмірленген айнымалы мәніне негіз-
делген, жазба нұсқасы бөлігінде ортақ жад аймағын түсіндіреді. Егер
нөмірленген айнымалы мәні орындалу уақытында өзгерген болса, сол
есте сақтау ауданын деректердің түрлі түрі ретінде түсіндіруге болады.
7-тарау сипатталғандай пайымдау, осындай қате ретінде бұзылуына әке-
луі мүмкін.
Мысал 4.21
ADA-ның синтаксис бойынша композициялық объектісі болып табы-
латын келесі мысалда хабарландырулар нұсқасы рекордын көрсетеді.
DATA түрі диапазондарда түрі бүтін үш жолдардан тұрады тіркелгісі
болып табылады. Тағайындау түрі жолдың бірі ретінде жазбаның атын
қамтитын нұсқа рекордтық болып табылады. «problem, solved» және
«date_assigned» тіркелген өрістер болып саналады, ал нөмерленген
«submission» түрінен басталатын өрістер нұсқаулық жолы болып табы-
лады. Үш мүмкіндік кездеседі: submitted, tobe, және missed. Егер мәні
«submission submitted» болса, онда бір бүтін сан түрі іске қосу нұсқасы
ауқыммен 1. 100 болады. Егер мән «to be» болса онда өріс «DATA» де-
регі ретінде қарастырылады. Егер мән «missed» болса онда өрістің мәні
бүтін 0 санына ие болады. Алайда нұсқаулы жолдың түсіндіруі өрістің
«submission» мәніне тәуелді болады.
type Date is
record
month: INTEGER range 1..12;
day: INTEGER range 1..31;
year: INTEGER range 2012..2015
end record
type status is (submitted, tobe, missed);
type assignment (submission : status) is
record
Problems: Integer range 1..10;
solved: Integer range 1..10;
214
date_assigned: DATE;
case submission is
when submitted => score:
Integer
range 1..100;
when tobe => expected: Date;
when missed => score: Integer := 0
end case
end record
ADA, Pascal және Module нұсқаулы жазбаны қолдайды. Алайда, нұсқа
рекордтық Oberon-нан алынып тасталды және анық 7-тарау сипат-
талғандай, байланысты айнымалы бөлігіндегі түріне бұзу қателігі әсері-
нен көптеген тілдерде ұсынылмайды
Prolog және Scala (1, 2, 3) формадағы динамикалық кортежді қолдайды.
Scala кортеждерді new tuple ‘(‘’)’ команда-
сын пайдалана отырып құра алады. Мысалы, бекіту val instructors = new
Tuple2(“Arvind,” “Paul”) бола алады, ал жеке элементтеріне instructors._1
және instructors._2 арқылы шығуға болады.
4.10.1.3 Ақпараттық Нысандардың Бірыңғайлығы
Бірыңғайлық индекстелген жиымдарды, ассоциативті, немесе вектор-
ларының тізімдерін пайдалана отырып іске реттілігі ретінде модельдеу
арқылы жңзеге асырылады. Алқаптар (1) жиым көмегімен (2) әртүрлі
өлшемдердегі мәндер беру немесе (3) әрбір өлшем бойынша анықтал-
майтын кеңейтілетін деректер элементтерінің болуы мүмкін біркелкі
алапты құру арқылы жариялана алады.
Мысал 4.22
Мысалы, C # -тегі массивті декларациялаудың әртүрлі схемаларына на-
зар аударайық.
int[] x = new int[5];// 5 өлшеміндегі бір өлшемді массив
int[] y = new int[] {1, 30, 44, 33, 8};
//элементтердің өлшемі - саны
int[] y = {1, 30, 44, 33, 8}; //элементтердің өлшемі - саны
int[,] z = new int[2, 3]; // Екі өлшемді массив
int[,] w = {{1, 2, 3}, {4, 5, 6}}; //матрица 2 × 3
int[] [] jagged1 = new int[6][]; // 6 қатар тегіс емес массив
jagged1[0] = new int[3] {10, 20, 30};
215
jagged1[1] = {1, 30, 44, 33, 8};
Сол сияқты, Ruby массивтер төмендегідей қарқынды кеңейтілуі мүмкін
белгілі бір мөлшері немесе анықталмаған өлшемі үшін мәлімделген бо-
лады:
x = Array.new # анықталмаған мөлшерін жаңа динамикалық массивін
құру үшін
x = Array.new(3) # мөлшері 3 жиымын жасау
x[0] = Array.new # бірінші элементі - кері массив
x[1] = [4, 5, 6, 7] # екінші массивтің 4 мөлшері бар
Ruby, сондай-ақ pop, push , shift, және unshift сияқты абстрактілі опе-
рацияларды пайдаланады, , сондай-ақ ол индекстелген рет болып сана-
лады. Рop операциясы етпен соңғы элементін жояды. Рush операциясы
жүйелі соңында орналастырылған элементін қосады. Shift операция
ретпен бірінші элементін жояды және бос орынды толтыру үшін, бірін-
ші орынға бір элементпен массивтің барлық элементтерін жылжытады.
Unshift операциясы соңғы күйіне барлық элементтерді жылжытады
және алаптың басында берілген элементті кірістіреді.
Мысал 4.23
Интерактивті Ruby үшін келесі формулировкіні енгізейік:
p = [10, 20, 30, 40] # Төрт бүтін сандардың жиымын жасау
p. pop# Соңғы элементті алып тастау, сондай-р мәні ие болады [10, 20,
30]
p. push(80) # 8-баған - соңында және мәні р ие болады [10, 20, 30, 80]
p. shift# Бірінші элементті алып тастау, сондай-р мәні ие болады [20, 30,
80]
p. unshift (100) # Бірінші элементі ретінде 100 салып, р болып табыла-
ды[100, 20, 30, 80]
216
ADA, Fortran, C, C++, C#, Java, Паскаль, Modula-2 және Modula-3 си-
яқты аманатты бағдарламалау парадигмасын қолдайтын тілдер, алап-
тарды қолдайды. ADA, сондай-ақ жартылай динамикалық массивтер
қолдайды. C #, Ruby және Scala қолдау динамикалық массивтер сияқты
объектілі-бағытталған тілдер, массивтер қарқынды құрылуы мүмкін кез
келген басқа нысаны ретінде ұсынылуы мүмкін. Lisp және Prolog көп-
теген іске асыру ретінде динамикалық тілдері, сондай-ақ, динамикалық
массивтер қолдайды. Динамикалық массивтер бағдарламалар реттелме-
ген алапта орналастырылады. Әр түрлі тілдердегі бағдарламалау син-
таксис массивтер кейбір жарнамалар мысалдары 4.2-кесте көрсетілген.
Modula-3 секілді тілдер де массив типті декларацияда сериялық нөмірін
қолдайды. Мысалы, Modula-3-те жиым, сондай-ақ ARRAY ['A'..'D'] OF
INTEGER, ретінде ұсынылуы мүмкін, мұнда «А» индексі 1, және «D»
индексі 4 пен теңесиіріледі.
Модуль-3 секілді Тілдер, сондай-ақ, массив декларацияда сериялық
түрі санын қолдайды. Модуль-3 Mysaly массив, сондай-ақ, [ «D» .. «А»]
kakMASSIV ұсынылуы мүмкін IℤTSELOGO «А» индексі 1, және «D»
индексі 4. салыстырғанда қайда саны осы алаптың баламалы ARRAY
табылады [1. .4] бүтін. Бұл жиым Array [1 .. 4] бүтініне тең.
4.2 кесте таңдалған тілдердегі декларация құрылысы
Language – тіл; array description – құрылысының сипаттамасы; ADA,
C, C++, Java, Modula-3, Ruby, Scala – ADA; C, C++, Java, Modula-3,
Ruby, Scala; array of integer – бүтіндердің құрылысы; int – бүтін; new
int – жаңа бүтін; var – әр түрлі; array – құрылысы; new – жаңа; integer
– бүтін.
217
4.10.1.4 Кеңейтілген ақпараттық нысандар
Жүзеге асыру деңгейіне меңзерді қолдау барлығы дерлік қазіргі заманғы
тілдері, не тікелей немесе жанама күйінде, кез келген көрсеткіштер
осындай байланысты тізімдерді ағаштар мен графикалар сияқты ре-
курсивті деректер құрылымдарын пайдалана отырып құрылуы мүмкін.
Көрсеткіштер қатты Pascal және Modula-3 сияқты, рекурсивті құрылым-
дық деректермен анық байланысты болуы мүмкін. Мұндай ADA, C, C
++ сияқты көптеген тілдерде, жылы, көрсеткіштер кез келген деректер
құрылымына байланысты болуы мүмкін тәуелсіз объект ретінде сақтала-
ды. Индексі көрсетілетін жады жасушаларын оқуға арналған механизм,
- сілтегіш өзгерту арқылы индексі деректерінің құрылымының негізінде
элементке қатынасу мүмкіндігі. Lisp және Prolog сияқты декларативтік
тілдері, тілді енгізу үшін меңзерді салып, бағдарламашыларға көрсет-
кіштерді тікелей басқаруға мүмкіндік бермейді; құрылымдық деректер,
одан теріс сияқты жоғары деңгейдегі ядро операторларының көмегімен
кеңейтіледі, мысалы cons, insert және append. Бұл операциялар 9 және
10 тарауларында талқыланады.
ADA тіліндегі байланыс тізімінің хабарлануы
C және C++ тіліндегі байланс тізімінің хабарлануы
Modula-3 тіліндегі байланыс тізімінің хабарлануы
Modula-3 бастапқы түрді және кеңейтілген ақпараттық нысандарды қол-
дап, меңзерлерді қолдану арқылы құрылды
218
Type list_Pointer is my access My_List – Жаз, тізім көрсеткіш менің
тізіме қол жеткізуші болады; type My_List is – жаз, менің тізімім ол;
record – жазып алу; info: integer – мәлімет: бүтін; next: List_Pointer –
келесі: тізім көрсеткіш; end record – жазуды аяқтау; start: List_Pointer
– бастау: тізім көрсеткіш; always points to start of the list – әрқашанда
тізімнің басталуына көрсетеді; last: List_Pointer – соңғы: тізім көр-
сеткіш; Points to the end of the list – тізімнің соңына көрсетеді; Linked
list declaration in C and C++ - С және С++-тағы қосылған декларация
тізімі; struct my list – менің тізімімді құрастыру; int info – int мәлімет;
my_list* next – менің тізімім* келесі; linked list declaration in Modula-3 –
Modula-3-ке қосылған декларация тізімі; Modula-3 supports reference
type, and extensible data entities are built using pointers - Modula-3
анықтама түрін қолдайды, және кеңейтілетін деректер тұлғалары
көрсеткіштерді пайдаланып құрастырылды; Type – жаз; My_List =
record – Менің тізімім = жазып алу; info:INTEGER – мәлімет: БҮТІН;
next: Ref My_List – келесі: анықтама менің тізімім; end – соңы.
Байланысты тізімді хабарлау Scala:
Scala - бұл бағдарламашы деңгейіне сілтемелерді пайдалану жасыра-
ды жоғары деңгейдегі мултипарадигмалы тілі. Оның тізімі Lisp және
Prolog-қа ұқсайды. Төменде көрсетілгендей Scala тізім, әр түрлі тәсіл-
дермен ұсынылуы мүмкін. Тізіміге қолтаңбаны жариялауға болады, не-
месе автоматты түрде алдын ала белгілі бір мәнмен қорытынды жасауға
болады.
val num : List[Int] = List(1, 2, 3) // num - бүтін тізімі
val num = List(1, 2, 3) // Тізімнен шығару түрі
val num = List()//Num — Кейінірек кеңейтілуі мүмкін бос тізімі,
val nested = List (List (1, 2, 3), List(4, 5, 6)) // кірістірілген тізімі
Оператор белгілеген құрастырмалы ақпараттық объект тізімі '::';, осы-
лайша тізімі (1, 2, 3), сондай-ақ Valnum = 1 :: тізіміне (2,3) ретінде ұсы-
нылуы мүмкін. Lisp, Ruby және Scala секілді көптеген тілдері негізгі
құндылықтарды жұбын қолдайды. Бұл жұп негізгі құндылықтары Lisp-
те ассоциативті салыстырулар, Scala-да жылы карталар және Rub-де қа-
219
жетсіз деректер деп аталады.
4.10.2 Бағдарламалау тілдерінде абстракцияларды басқару
4.10.2.1 Мутация
Императивтік бағдарламалау парадигмасын қолдайтын тілдер отыратын
заттарды және деструктивті жаңартуларды қолдайды. Mысалы, Ada,
Java, C ++, C #, Fortran және Pascal сияқты тілдер деструктивті жаңар-
туды қолдайды. Функционалдық бағдарламалау тілдері мызғымас объ-
ектілерді қолдайды. Сонымен қатар Lisp, Ruby және Scala сияқты көп-
теген функционалдық программалау тілдері де қозғалмалы объектілер
мен қозғалатын объектілерге қосымша деструктивті жаңартуды қолдай-
ды. Lisp деструктивті жаңарту мен жаһандық айнымалылар қолдайды,
сондай-ақ итерация аясында түрлі мәндеріне қоса тiркелуге оператор
ішіндегі цикл айнымалы индексті береді. Ruby және және Scala сияқты
мультипарадигмалы тілдері деструктивті жаңарту, сондай-ақ мызғымас
және өтпелі нысандарды қолдайды. Әдетте, байланысты тізімдер және
жолдар осындай шарттармен индекстелген тізбектері ретінде өзгермей-
тін объектілерін, ретінде қаралады, массивтер отыратын объектілері
ретінде қаралады.
4.10.2.2 Шартты бекітулер
Бағдарламалау тілінде шартты есептілігі, әдетте стандартты болып та-
былады. Барлық дерлік тілдер енгізілген шартты қолдайды. Көптеген
тілдер сондай-ақ оператор параметрін қолдайды. Haskell сияқты кей-
бір тілдер және Parlog және GHC сияқты кейбір параллель логикалық
қорғауды қолдайды. Функционалдық бағдарламалау тілдері шартты
сөйлемнің функционалдық нұсқасы бар.
Lisp-те жалпы топтау мақсаттағы үшін сол шартты бірнеше терминдер-
дегі шартты бекіту бар.
4.10.2.3 Итерациялар және Итераторлар
Аманатты бағдарламалау парадигмасын қолдайтын барлық дерлік тіл-
дер «ҮШІН» циклі мен шексіз итерация негізінде айнымалы индексін
қолдайды, мысалы жалғасы бар шартты цикл немесе «ӘЗІРГЕ»циклі. C
секілді кейбір тілдер «дейін» циклін «ҮШІН» циклына ұқсас етіп жа-
салған. Lisp, Ruby және Scala сияқты көптеген функционалдық бағдар-
ламалау тілдері қайталап шақыру функциялары үшін «ӘЗІРГЕ» және
«ҮШІН» циклдері сияқты анықталмаған итерацияны қолдайды. Де-
структивті жаңарту айнымалыларды қолдайтын функционалдық тіл-
дері сондай-ақ, итерациалды циклдарды да қолдайды. Ruby және Scala
220
осындай мультипарадигмалы тілдердің мысалы болып табылады. Scala
жалғасы бар шартымен циклды, «ӘЗІРГЕ» циклін, «үшін» циклі және
Итераторды қолдайды; ал Ruby жалғасы бар шартымен циклды, «үшін»
циклін, анықталмаған циклді және итераторларды қолдайды. Анықтал-
маған цикл Итерацияны шығу жағдайында арқылы шыққанша сақтай-
ды. Ruby-де әрбір деректер элементі объект болғандықтан, итераторы
және циклдар Ruby тілінде әдістері ретінде қарастырылады. Төменде
Ruby-дегі итерация құрылымдарының мысалы келтірілген.
[4, 5, 6].for each {|i| puts i} will write 4, 5, and 6 in that other.
10.times {|i| puts i} will write 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 in separate lines
For each-әр,put-алынып, will write-жазады, and-және, in that order-осы
ретпен
Times-рет, in separate lines-бөлек жолақта
4.10.3 Бағдарламалау тіліндегі мәліметтермен алмасу
Әртүрлі тілдер трансмиссиялық тетіктерін түрлі параметрлерді қолдай-
ды. Мысалы, мәні бойынша шақыртулар мен «С» тіліндегі сілтемесі
бойынша шақырту объектің деректерінің мекен-жайын көшіру арқылы
салыстырады. ң құны бойынша қоңырау пайдалану және қоңырау де-
ректер объектінің мекен-жайы көшіру модельдеу. «С ++» тілді, сілтеме
арқылы шақыру, және қоңырау «сілтеме тұрақты шақыру» пайдалана-
ды. «Сілтеме арқылы шақыру» беру параметрлерін механизмі, тек оқу
қатынасына рұқсат береді және нақты параметрге жазу мүмкіндік бер-
мейді.
Үйінді сақталған динамикалық нысандарына қатынасу әрқашан шақы-
ру мәні арқылы беріледі.Бұл сіз нысандарды ортақ пайдалануға мүмкін-
дік береді. Java мәні бойынша шақыруды пайдаланады. Көрсеткіштерді
пайдалану арқылы үйінді нысандарына қол жеткізу болғандықтан, мәні-
бойынша қоңырау көрсеткіштер көшіру арқылы заттарды ортақ пайда-
лану мүмкіндігін береді.
ADA сілтеме (қол жеткізу) бойынша нәтижесі мәні (IO режимі) және
шақыру , мәні (кіріс режимі) арқылы нәтижесінде шақыруды (шығыс ре-
жимі) пайдаланады. Нысандар жағдайына байланысты салыстырылған,
шақырушының бағдарламасының нақты параметрлерге қол нақты па-
раметрдің алдына сақтаулы «қорғалған» сөзін пайдалана отырып өзгер-
туден қорғауға болады. ADA сондай-ақ нақты және формальды параме-
трлердің икемді түптеу ресми параметр нақты параметр → қамтамасыз
түрінде аталған параметрлерін пайдалануға мүмкіндік береді; аталған
параметрлері тиісті ұстаным болуы тиіс емес.
221
C тілі мәні бойынша шақыруды пайдаланады. Алайда, C тіл сілтемені
шақыруғасәйкес келетін деректер құрылымын мекенжайын жібере ала-
ды. C ++, C #, F # Modula, Modula--2, Modula-3, Pascal-дың соңғы нұсқа-
сы, Fortran 90, PHP, және Python екі параметрлер трансмиссиялық меха-
низмін қолданады: сілтеме арқылы мәні мен сілтеме бойынша шақыру;
және сілтемені шақыру бойынша шақыру оны бөлу үшін, сақталған сөз
белгіленген.
Барлық объектілердің сілтемелер мәніне шақыруды пайдаланып беріледі,
және бақылау дестесін сақталады нысандарына кез келген сілтемелер
шақыру арқылы беріледі. Сондай-ақ, бақылау дестесін сақталған аз бір-
лігі, және деректер құрылымы ақпараттық объектілер, пайымдап шақы-
ру арқылы көшіріледі. Ruby мәні бойынша шақыру арқылы параметр-
лерді өтеді. Ruby барлық ақпарат нысандар үйіндісіне сақталған объект
болып табылады; және әрбір айнымалы тиісті объектіге сілтеме болып
келеді. Айнымалы мәнді тағайындау жаңа нысанға жаңа нысанды және
ұпай құру баламасы болып табылады.
Басқа айнымалы бір айнымалы мәнді тағайындау объектінің мекен-жайы
көшіруге тең. Ruby шақыру мәні бойынша нысан мекенжайын көшірме-
лерін жасайды, сондықтан формалды параметр объектіге қол жеткізу-
ден басталады. Интерактивті Ruby келесі бағдарламасы осы принципті
түсіндіреді:
Достарыңызбен бөлісу: |