Irina’s Weblog

27/10/2004

Çà Java-òà è const-a

Filed under: Computers,Daily — Izida @ 7:01 pm

Ïðîñòî íå ìîãà äà ñå ïðèìèðÿ ñ ëèïñàòà íà íà÷èí äà íàêàðàø Java-òà äà ñ÷èòà ñúñòîÿíèåòî íà åäèí îáåêò çà íåïðîìåíÿåìî! Ìîæåø äà íàïðàâèø ðåôåðåíöèÿòà êúì íåãî final, ïðè êîåòî íèêîé íÿìà äà ìîæå äà ïðîìåíè êúì êîé îáåêò ñî÷è òÿ. Íî ñàìèÿò îáåêò å ãîë-ãîëåíè÷úê ïî îòíîøåíèå íà êîíñòàíòíîñò – ìîæåø äà ãî ìîäèôèöèðàø ñòèãà äà èìàø ïîä ðúêà ïîäîáíè ìåòîäè ðàçáèðà ñå.

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

Ñóïåð! Òàêàâà áîðáà, òàêîâà ïèñàíå íà êîä, âèêàíå íà êîíñòðóêòîðè, ïîäìÿòàíå íà âðåìåííè îáåêòè, è òî çàùî? Ñàìî è ñàìî çà äà ñå çàñòðàõîâàì, ÷å íèêîé íÿìà äà ìè ïðîìåíè îáåêòà, ÷å êëàñà å immutable. À êîëêî ïî-ëåñíî ìîæåøå äà áúäå ñàìî.

8 Comments »

  1. Ìîæå getter-à äà òè ïîëó÷àâà èíäåêñ è äà âðúùàø äèðåêòíî èñêàíèÿ åëåìåíò îò ìàñèâà.

    Åñòåñòâåíî ïðîáëåìà òîãàâà ñå ïîëó÷àâà, àêî â íåãî äúðæèø mutable îáåêòè, êîèòî íà ñâîé ðåä ìîãàò äà ñå ïðîìåíÿò, íî â êðàéíà ñìåòêà åäâà ëè è defensive copy-òî òè ïðàâè òîëêîâà “äúëáîêî” êîïèðàíå.

    Signed: 0xdeadc0de

    Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:05 pm

  2. Âñå ïàê öåëòà íà immutability-òî å èìåííî äà íå ïðåäîñòàâèø ðåôåðåíöèÿ êúì îáåêò, êîéòî òè ïðèòåæàâàø, íà íèêîé. Òàêà ÷å êîïèðàíåòî òðÿáâà äà å äúëáîêî.  êîíêðåòíèÿ ñëó÷àé – àéäå, åäèí ìàñèâ, ùå ãî êîïèðàì. Íî òîçè ìàñèâ å íóæåí â öèêúë. Òàêà ÷å íå ìè ñå ìèñëè êîëêî ìàñèâ÷åòà ùå ñå ñúçäàäàò ñàìî è ñàìî çà äà ïîñòèãíà const-à â C++ !

    Comment by Izida — 27/10/2004 @ 7:11 pm

  3. Íî òè íÿìà äà ïðåäîñòàâÿø òâîÿ ñè îáåêò ?!?
     òâîÿ ñëó÷àé âìåñòî äà ïðàâèø êîïèå íà öåëèÿ ìàñèâ, ìîæåø äà íàïðàâèø êîïèå ñàìî íà íÿêîé îò åëåìåíòèòå ìó. À àêî åëåìåíòèòå ìó ñà immutable äàæå íÿìà íóæäà è îò êîïèå.

    Àéäå äà ñè õîäèì è ùå ïðîäúëæèì âêúùè, à ?

    Signed: 0xdeadc0de

    Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:17 pm

  4. Ìðúñíèöè! Êîãà íàïðàâè áëîã, êîãà ïî÷íàõòå äà ñè ïðàâèòå ïëàíîâåòå çà âêúùè ïóáëè÷íî! À ñíèìêè 🙂 ? Ñíèìêè íÿìà ëè äà èìà îò “ïðîäúëæåíèåòî âêúùè” ðŸ™‚ ?

    Comment by Äîí÷î — 27/10/2004 @ 7:30 pm

  5. 🙂 Ëú÷êî, çàäúëáà ïðåêàëåíî ìíîãî â êîíêðåòíèÿ ïðèìåð. Òîé èìàøå çà öåë åäèíñòâåíî äà èëþñòðèðà ôàêòà, ÷å òðóäíî ñå ïîñòèãà â Java êîíñòàíòíîñò íà ñúñòîÿíèåòî íà îáåêòèòå îò äàäåí êëàñ. Äà íå ãîâîðèì, ÷å îñâåí êîïèðàíåòî íà îáåêòè ñ öåë äà íå ïðèåìàø/âðúùàø ðåôåðåíöèè è ïðàâåíåòî íà ðåôåðåíöèèòå final, òðÿáâà è äà çàáðàíèø íàñëåäÿâàíåòî (èëè ïîíå äà ñè ñèãóðåí, ÷å íàñëåäåíèÿò êëàñ íå ìîæå äà ïèïà ÷ëåíîâåòå) è äà íå ïðåäñîòàâèø ìåòîäè-ìîäèôèêàòîðè. Íî òîãàâà ùå ñå íàìåñè reflection-à è ñè äî òàì ñ êîíñòàíòíîñòòà 🙂

    Comment by Izida — 27/10/2004 @ 7:33 pm

  6. Äîí÷î! Êàòî ãëåäàø êàê ñìå ãî ïîäõâàíàëè “ïî ïúò êúì âêúùè”, ñìÿòàø ëè, ÷å ùå òè å èíòåðåñíî ïðîäúëæåíèåòî ? 🙂 Àç ëè÷íî ïëàíèðàì äà ñè ïóñíà íÿêîé ãëåäàí âå÷å âåñåë ôèëì è äà ñå èçëåãíà. Íî ñèãóðíî ïàê ùå ïîëåãíà ñ “Åôåêòèâåí C++” – êíèæêàòà ìè õàðåñà.

    Comment by Izida — 27/10/2004 @ 7:36 pm

  7. Èìà Security Manager ñ êîéòî ìîæåø äà ñïðåø reflection-à.

    Çà Äîí÷î: Ñíèìêè íå äàâàìå! Íàäÿâàì ñå íå ñè èíñòàëèðàë êàìåðêè â àïàðòàìåíòà 😉

    Comment by Ëú÷åçàð Àíãåëîâ — 27/10/2004 @ 7:37 pm

  8. ËÎÎÎË, áðàâî, ìàçíî, îñòðîóìíî!
    Äîáðà èäåÿ, èìà îùå âðåìå! Êàê íå ñå áÿõ ñåòèë…

    Comment by Äîí÷î — 27/10/2004 @ 7:39 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment