Çà Java-òà è const-a
Ïðîñòî íå ìîãà äà ñå ïðèìèðÿ ñ ëèïñàòà íà íà÷èí äà íàêàðàø Java-òà äà ñ÷èòà ñúñòîÿíèåòî íà åäèí îáåêò çà íåïðîìåíÿåìî! Ìîæåø äà íàïðàâèø ðåôåðåíöèÿòà êúì íåãî final, ïðè êîåòî íèêîé íÿìà äà ìîæå äà ïðîìåíè êúì êîé îáåêò ñî÷è òÿ. Íî ñàìèÿò îáåêò å ãîë-ãîëåíè÷úê ïî îòíîøåíèå íà êîíñòàíòíîñò – ìîæåø äà ãî ìîäèôèöèðàø ñòèãà äà èìàø ïîä ðúêà ïîäîáíè ìåòîäè ðàçáèðà ñå.
Ïðåñåí ïðèìåð çà áîðáàòà ìè ñ ëèïñàòà íà const îáåêò å åäèí êëàñ, êîéòî ñúäúðæà ðåôåðåíöèÿ êúì îáèêíîâåí ìàñèâ. Òîçè ìàñèâ òðÿáâà äà íå ñå ïðîìåíÿ ñëåä ñúçäàâàíåòî íà îáåêòà. Ñúîòâåòíî ðåôåðåíöèÿòà å final. Íî getter ìåòîäúò çà òîçè ìàñèâ òðÿáâà äà å ïî-îñîáåí – íå ñòèãà ïðîñòî äà âúðíåø òàçè ðåôåðåíöèÿ, ïîíåæå òîãàâà ÷îâåê ìîæå îòâúí äà ïðîìåíè ñúùèÿ òîçè ìàñèâ, êúì êîéòî ñî÷è è âúòðåøíàòà çà îáåêòà ðåôåðåíöèÿ. Êàêâî äà íàïðàâèì? Ïðîñòî å : ò.íàð. defensive copy – ò.å. âðúùàìå íå ðåôåðåíöèÿòà äèðåêòíî, à ïðàâèì êîïèå íà ìàñèâà è âðúùàìå ðåôåðåíöèÿ êúì êîïèåòî. Ñúùîòî ñå ïðàâè è “íà âõîäà” – ò.å. àêî òðÿáâà äà ñúçäàäåì êîíñòðóêòîð, ïðèåìàù ìàñèâ – êîïèðàìå ìàñèâà â êîíñòðóêòîðà. Ïîíåæå åäèí “ëîø” ïîòðåáèòåë íà êëàñà ìîæå ñëåä êàòî ñúçäàäå èíñòàíöèÿ è ÿ èíèöèàëèçèðà ñ äàäåí ìàñèâ, äà ïðîìåíè ñúùèÿ òîÿ ìàñèâ.
Ñóïåð! Òàêàâà áîðáà, òàêîâà ïèñàíå íà êîä, âèêàíå íà êîíñòðóêòîðè, ïîäìÿòàíå íà âðåìåííè îáåêòè, è òî çàùî? Ñàìî è ñàìî çà äà ñå çàñòðàõîâàì, ÷å íèêîé íÿìà äà ìè ïðîìåíè îáåêòà, ÷å êëàñà å immutable. À êîëêî ïî-ëåñíî ìîæåøå äà áúäå ñàìî.


Ìîæå getter-à äà òè ïîëó÷àâà èíäåêñ è äà âðúùàø äèðåêòíî èñêàíèÿ åëåìåíò îò ìàñèâà.
Åñòåñòâåíî ïðîáëåìà òîãàâà ñå ïîëó÷àâà, àêî â íåãî äúðæèø mutable îáåêòè, êîèòî íà ñâîé ðåä ìîãàò äà ñå ïðîìåíÿò, íî â êðàéíà ñìåòêà åäâà ëè è defensive copy-òî òè ïðàâè òîëêîâà “äúëáîêî” êîïèðàíå.
Signed: 0xdeadc0de
Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:05 pm
Âñå ïàê öåëòà íà immutability-òî å èìåííî äà íå ïðåäîñòàâèø ðåôåðåíöèÿ êúì îáåêò, êîéòî òè ïðèòåæàâàø, íà íèêîé. Òàêà ÷å êîïèðàíåòî òðÿáâà äà å äúëáîêî.  êîíêðåòíèÿ ñëó÷àé – àéäå, åäèí ìàñèâ, ùå ãî êîïèðàì. Íî òîçè ìàñèâ å íóæåí â öèêúë. Òàêà ÷å íå ìè ñå ìèñëè êîëêî ìàñèâ÷åòà ùå ñå ñúçäàäàò ñàìî è ñàìî çà äà ïîñòèãíà const-à â C++ !
Comment by Izida — 27/10/2004 @ 7:11 pm
Íî òè íÿìà äà ïðåäîñòàâÿø òâîÿ ñè îáåêò ?!?
 òâîÿ ñëó÷àé âìåñòî äà ïðàâèø êîïèå íà öåëèÿ ìàñèâ, ìîæåø äà íàïðàâèø êîïèå ñàìî íà íÿêîé îò åëåìåíòèòå ìó. À àêî åëåìåíòèòå ìó ñà immutable äàæå íÿìà íóæäà è îò êîïèå.
Àéäå äà ñè õîäèì è ùå ïðîäúëæèì âêúùè, à ?
Signed: 0xdeadc0de
Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:17 pm
Ìðúñíèöè! Êîãà íàïðàâè áëîã, êîãà ïî÷íàõòå äà ñè ïðàâèòå ïëàíîâåòå çà âêúùè ïóáëè÷íî! À ñíèìêè 🙂 ? Ñíèìêè íÿìà ëè äà èìà îò “ïðîäúëæåíèåòî âêúùè” ðŸ™‚ ?
Comment by Äîí÷î — 27/10/2004 @ 7:30 pm
🙂 Ëú÷êî, çàäúëáà ïðåêàëåíî ìíîãî â êîíêðåòíèÿ ïðèìåð. Òîé èìàøå çà öåë åäèíñòâåíî äà èëþñòðèðà ôàêòà, ÷å òðóäíî ñå ïîñòèãà â Java êîíñòàíòíîñò íà ñúñòîÿíèåòî íà îáåêòèòå îò äàäåí êëàñ. Äà íå ãîâîðèì, ÷å îñâåí êîïèðàíåòî íà îáåêòè ñ öåë äà íå ïðèåìàø/âðúùàø ðåôåðåíöèè è ïðàâåíåòî íà ðåôåðåíöèèòå final, òðÿáâà è äà çàáðàíèø íàñëåäÿâàíåòî (èëè ïîíå äà ñè ñèãóðåí, ÷å íàñëåäåíèÿò êëàñ íå ìîæå äà ïèïà ÷ëåíîâåòå) è äà íå ïðåäñîòàâèø ìåòîäè-ìîäèôèêàòîðè. Íî òîãàâà ùå ñå íàìåñè reflection-à è ñè äî òàì ñ êîíñòàíòíîñòòà 🙂
Comment by Izida — 27/10/2004 @ 7:33 pm
Äîí÷î! Êàòî ãëåäàø êàê ñìå ãî ïîäõâàíàëè “ïî ïúò êúì âêúùè”, ñìÿòàø ëè, ÷å ùå òè å èíòåðåñíî ïðîäúëæåíèåòî ? 🙂 Àç ëè÷íî ïëàíèðàì äà ñè ïóñíà íÿêîé ãëåäàí âå÷å âåñåë ôèëì è äà ñå èçëåãíà. Íî ñèãóðíî ïàê ùå ïîëåãíà ñ “Åôåêòèâåí C++” – êíèæêàòà ìè õàðåñà.
Comment by Izida — 27/10/2004 @ 7:36 pm
Èìà Security Manager ñ êîéòî ìîæåø äà ñïðåø reflection-à.
Çà Äîí÷î: Ñíèìêè íå äàâàìå! Íàäÿâàì ñå íå ñè èíñòàëèðàë êàìåðêè â àïàðòàìåíòà 😉
Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:37 pm
ËÎÎÎË, áðàâî, ìàçíî, îñòðîóìíî!
Äîáðà èäåÿ, èìà îùå âðåìå! Êàê íå ñå áÿõ ñåòèë…
Comment by Äîí÷î — 27/10/2004 @ 7:39 pm