Бақылау сұрақтарға конспект: Мұрагерлік және полиморфизм


Функцияларға сілтеме типтерін беру



бет7/14
Дата25.05.2022
өлшемі56,39 Kb.
#35561
түріКонспект
1   2   3   4   5   6   7   8   9   10   ...   14
Функцияларға сілтеме типтерін беру.
Анықтамалық айнымалыны ішкі бағдарламаға беру кезінде бірқатар айырмашылықтар пайда болады қарабайыр типтердің жағдайымен салыстырғанда, өйткені ол жүретін жергілікті айнымалыда
ішкі бағдарламада жұмыс істеу, объектінің өзі емес, оның мекенжайы көшіріледі. Сондықтан жаһандық бірдей нысанға сілтеме жасайтын айнымалы бірдей өрістерге қатынасады деректер жергілікті ретінде. Нәтижесінде әдіс ішіндегі нысанның деректер өрістерін өзгерту
әдістен шыққаннан кейін бұл өзгерістерді көретінімізге әкеледі (және бұл маңызды емес, өрістерді тікелей немесе кейбір әдістерді шақыру арқылы өзгертеміз).
Мысалы, пакетімізде Орын сыныбын жасайық. Ол тапсырма үшін қызмет етеді.Параметрлер тізімі арқылы өтетін сәйкес типтегі нысан
m1 әдісі біздің қолданбадан шақырылады.
public class Location {
public int x=0,y=0;
public Location (int x, int y) {
this.x=x;
this.y=y;
}
}


Кіші бағдарлама ішіндегі сілтемелерді өзгерту мәселесі.
Бірнеше шешімдер бар.
Біріншіден, бұл жағдайда бұл ең ақылға қонымды, оның орнына ішкі бағдарлама процедурасы емес мәнді қайтармаса, қайтаратын ішкі бағдарлама функциясын жазыңыз String түрінің мәні:
public String calcName2(String name) {
count++;
name+=count;
return name;
}
Бұл жағдайда мәнді қайтару проблемалары жоқ және келесі түймені басу өңдегіші мынаны көрсетеді:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
componentName=calcName2(componentName);
System.out.println("componentName="+componentName);
}
Өкінішке орай, егер сізге бірнеше мәнді қайтару қажет болса, бұл әдіс
мәселенің шешімі дұрыс емес. Бірақ көбінесе ішкі бағдарламадан екі қайтару қажет немесе одан да көп өзгертілген немесе есептелген мәндер.
Екіншіден, сіз жаһандық жол айнымалысын пайдалана аласыз - бірақ бұл
нашар бағдарламалау стилі. Тіпті жаһандық айнымалыны пайдаланғанда да
алдыңғы мысал өте жақсы емес - бірақ біз оны қиындатпау үшін жасадық
мысал.
Үшіншіден, бар қаптаманы жасауға болады
жол түрінің өрісі. Мұндай нысан ішкі бағдарламаға сілтеме арқылы және оның ішінде беріледі ішкі бағдарлама жол өрісінің мәнін өзгертеді. Бұл жағдайда, әрине, бұл өріс болады жаңа жол нысанына сілтеме жасаңыз. Бірақ оралған нысанға сілтеме ішінде болғандықтан ішкі программа өзгермейді, орауыш объектісі арқылы жаңа жолмен байланыс сақталады және сыртында. Бұл тәсіл жол функциясының тәртібін қолдануға қарсы түрі, бір уақытта мәндердің ерікті санын қайтаруға мүмкіндік береді және тек жол емес, ерікті түр. Бірақ оның кемшілігі бар - бұл қажет қайтарылған нысандарды қалыптастыру үшін арнайы сыныптарды жасаңыз.
Төртіншіден, StringBuffer немесе сыныптарын пайдалануға болады
StringBuilder. Бұл артық қайтарудың ең қолайлы жолы бірдей мағынада, өйткені бұл жағдайда бұл ең қарапайым және өте пайдалану жылдамдығы мен ресурстары тұрғысынан тиімді. Сәйкесті қарастырыңыз код.
public void calcName3(StringBuffer name) {
count++;
name.append(count);
System.out.println("Новое значение="+name);
}
StringBuffer sbComponentName=new StringBuffer();
{sbComponentName.append("myComponent");}
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt){
calcName3(sbComponentName);
System.out.println("sbComponentName="+sbComponentName);
}
Жолдық өріс компонентінің орнына енді өрісті қолданамыз
StringBuffer түрінің sbComponentName. Қандай да бір себептермен, бұл сыныптың әзірлеушілері болжай алмады оған жол түрінің параметрімен конструктор жасаңыз, сондықтан сіз оны пайдалануыңыз керек sbComponentName айнымалысы тағайындалған инициализация блогы
тривиальды емес бастапқы мән. Кодтың қалған бөлігі қарапайым. Негізгі айырмашылығы String түріндегі айнымалы мәнді пайдалану - бұл сақталған жолдың мәнін өзгерту StringBuffer айнымалысы осымен байланысты жаңа нысанды жасамайды айнымалы.




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10   ...   14




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет