JavaRush /Курсы /All lectures for AM purposes /Ի՞նչ են mutable/immutable օբյեկտները և ինչու են դրանք անհ...

Ի՞նչ են mutable/immutable օբյեկտները և ինչու են դրանք անհրաժեշտ

All lectures for AM purposes
1 уровень , 197 лекция
Открыта
Ի՞նչ են mutable/immutable օբյեկտները և ինչու են դրանք անհրաժեշտ - 1

— Ողջույն, Ամիգո!

— Ողջույն, Բիլաաբո:

— Այսօր Բիլաաբոն կպատմի քեզ mutable և immutable օբյեկտների մասին:

Օբյեկտները, որոնք ստեղծվելուց հետո հնարավոր է փոփոխել, կոչվում են փոփոխելի կամ mutable.

Օբյեկտները, որոնք ստեղծվելուց հետո հնարավոր չէ փոփոխել, կոչվում են անփոփոխելի կամ immutable.

— Իսկ ինչից է կախված, թե հնարավոր է փոխել օբյեկտը, թե չէ?

— Մարդը, ով գրում է նոր կլաս, կարող է այնպես անել, որ այս կլասի օբյեկտները լինեն անփոփոխ։ Օրինակ, հնարավոր է թաքցնել բոլոր setter-ները — օբյեկտը կունենա միայն կոնստրուկտոր և getter-ներ, ուստի ստեղծելուց հետո հնարավոր չի լինի այն փոխել։

— Եվ ինչու՞ է սա օգտակար:

— Անփոփոխելի օբյեկտները ունեն շատ օգտակար հատկություններ։ Սակայն կարելի է առանձնացնել երկու, որոնք հատուկ են գրեթե բոլոր immutable օբյեկտներին:

1) Անփոփոխելի օբյեկտները կարող են իրականացնել շատ ավելի հեշտ, քան փոփոխելի օբյեկտները:

2) Անփոփոխելի օբյեկտները կարելի է ազատորեն օգտագործել միաժամանակ տարբեր նիթերից:

Շատ հաճախ, երբ ծրագրավորողը որոշում է գրել immutable կլաս, նա անում է այս կլասի երկու տարբերակները՝ mutable և immutable:

— Իսկ ինչու մի կլասի փոխարեն գրել երկու՞ կլաս:

— Երբեմն ավելի շահավետ է, երբ անփոփոխելի տարբերակը շատ ավելի հեշտ/արագ կլինի, քան փոփոխելի: Այդ ժամանակ և անում են երկու տարբերակ: Սա գրեթե ինչպես ArrayList և LinkedList. երկուսն էլ — ցուցակներ են, բայց մեկը օպտիմիզացվել է որոշակի նպատակների համար, իսկ մյուսը՝ ուրիշների համար:

— Հիմա ավելի պարզ է:

— Կան նաև զուտ immutable կլասներ՝ առանց mutable տարբերակի:

— Իսկ եթե ինձ պետք է ինչ-որ բան փոխել այդ օբյեկտի մեջ? Ի՞նչ կարելի է անել անփոփոխելի օբյեկտի հետ:

— Հիմնականում immutable կլասները ունեն տարբեր մեթոդներ, որոնք «ինջպես թե» փոխում են օբյեկտը, բայց բացի ինջնելուց դրանք պարզապես ստեղծում են նոր օբյեկտ և վերադարձնում այն:

Ահա քեզ մի քանի օրինակ՝

Java կոդ Նկարագիր
String s = "moscow";
String s2 = s.toUpperCase();
Արդյունքում s պարունակում է տեքստը «moscow», իսկ s2՝ «MOSCOW»
Integer i = 1;
Integer j = i;
j++;
Ահա թե ինչ է տեղի ունենում իրականում.
Integer i = new Integer(1);
Integer j = i;
j = new Integer(i.getInt()+1);

String կլասը — սա immutable կլաս է։ String տիպի բոլոր օբյեկտները — անփոփոխելի են, բայց դա մեզ չի խանգարում դրանք օգտագործել։ Օրինակ, toUpperCase() մեթոդը String կլասի փոփոխում է տողը մեծատառերով (փոխում է բոլոր փոքրատառերը մեծատառերով): Բայց այս մեթոդը չի փոխում ինքը տողը, այլ վերադարձնում է նոր տողը, որը նույնն է առաջինին, բայց բոլոր տառերը մեծատառերով (մեծ տառեր):

Integer կլասը նույնպես immutable կլաս է։ Integer տիպի բոլոր օբյեկտները — անփոփոխելի են։ Ամեն անգամ, երբ մենք փոխում ենք Integer օբյեկտը, իրականում ստեղծվում է նոր օբյեկտ:

— Ինչ հետաքրքիր է։ ՈՒրա, Բիլաաբո:

— ՈՒրա ինձ, ՈՒրա Բիլաաբո:

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ