÷åòâúðòúê ïîïàäíàõ íà èíòåðåñíà online êíèæàðíèöà.  íåÿ äîñòàâêàòà å áåçïëàòíà, à èìà è äîñòà äîáðè îòñòúïêè îò öåíèòå íà êíèãèòå. Ëú÷î ñå ïðîòèâîïîñòàâè íà ïðàâèëîòî, ãëàñÿùî : “Åäíà æåíà å ãîòîâà äà êóïè íåùî çà 2 ëåâà àêî ñòðóâà 4 ëâ. äîðè è äà íå è òðÿáâà – çàùîòî å ñ íàìàëåíèå. À åäèí ìúæ å ãîòîâ äà äàäå è 20 ëâ. çà íåùî, êîåòî ñòðóâà 2 ëâ. çàùîòî ìó òðÿáâà íà ñåêóíäàòà.” Òîé ñè õàðåñà êíèãàòà “Java çà ìðåæîâè ïðèëîæåíèÿ / Ïðîôåñèîíàëíî” íà Äèê Ñòåôëèê è Ïðàøàíò Ñðèäõàðàí, ÈíôîÄÀÐ, 2001 ã. (ISBN 954-761-018-X, ISBN íà àíãëèéñêîòî èçäàíèå 0-13-084466-7). Êíèãàòà èìà êîðè÷íà öåíà (ñ âêëþ÷åíî ÑÄ) 19 ëâ., à â òàçè êíèæàðíèöà áåøå íà ïðîìîöèÿ – 4.94 ëâ.! È òàêà â ïåòúê êíèãàòà ïðèñòèãíà – ìàñèâíî òîì÷å, ðàçãëåæäàùî JDBC, RMI, IDL, Java Beans, Jini, JMX/JMAP, JNDI è äð. Âå÷åðòà ñå èçëåãíàõ è ðåøèõ äà ïîïðî÷åòà íÿêîÿ è äðóãà ñòðàíèöà ïðåäè çàñïèâàíå (è áåç òîâà áÿõ â Ïëîâäèâ, êúäåòî êîìïþòúð íÿìàì).
Êíèãàòà çàïî÷âàøå äîñòà îáåùàâàùî – ïúðâàòà ãëàâà íîñè èìåòî “Java çà íàïðåäíàëè”. Íà ÷èòàòåëèòå å îáÿñíåíî, ÷å àêî íå ïîçíàâàò Java òî å äîáðå äà âçåìàò íÿêîÿ ïî-ïîäõîäÿùà çà òÿõ êíèãà. Íà ëèöåòî ìè èçãðÿ êðàòêîòðàéíà óñìèâêà. Êàçâàì êðàòêîòðàéíà, ïîíåæå êàòî çàïî÷íà ãëàâàòà, ïúðâîòî ÷åòèâî çà “íàïðåäíàëè” áåøå êàêâî å òîâà êëàñ è êàêâè ÷ëåíîâå ìîæå äà èìà òîé – ïðîìåíëèâè, ìåòîäè, ùî å òî êîíñòðóêòîð. Êàçàõ ñè : “Àêî òîâà å advanced Java, òî íå èñêàì äà çíàì êàêâî å basic Java ñïîðåä êðèòåðèèòå íà òîçè ïðåïîäàâàòåë!”. Åñòåñòâåíî íå ìèíàâà è áåç îòðè÷àíå íà C++ – íÿìàëî íóæäà îò òîëêîâà äåáúãâàíå êàêòî â C++. Ùîì êàçâàò… I/O-òî íà Java-òà ïðîñòî áëèêà îò ñóïåðëàòèâè. È âñå ïàê òîâà íå ãî ðàçáðàõ :
“Àêî âíåñåòå âàøèòå C++ I/O ïðîöåäóðè â Java ùå çàãóáèòå òîëêîâà ôóíêöèîíàëíîñò, êîëêîòî àêî ïðåíåñåòå îáåêòíî-îðèåíòèðàíèòå òåõíèêè çà ïðîåêòèðàíå â Java îò C++.”
Òóê ñè ïðèïîìíèõ, ÷å Äèê Ñòåôëèê (ïðåïîäàâàù âå÷å 25 ãîäèíè â Óíèâåðñèòåòà Áèíãàìòúí – Äúðæàâíèÿ óíèâåðñèòåò íà Íþ Éîðê) å íàïèñàë âòîðîòî èçäàíèå íà òàçè êíèãà ñëåä êàòî ñå îáàäèë äà ïèòà â èçäàòåëñòâîòî êîãà ùå èçëèçà è òå ìó îáÿñíèëè – àâòîðúò íà ïúðâîòî èçäàíèå âå÷å íå ðàáîòåë â Sun, à â Microsoft, è íÿìàëî äà ïèøå ïîâå÷å ïî òàçè òåìà. Òà ñå ÷óäÿ îò íåãî ëè ñà òåçè êðàñîòè, îò ïúðâîòî èçäàíèå ëè, èëè îò ïðåâîäà? Ñúñ ñèãóðíîñò îò ïðåâîäà îáà÷å èäâà èçðàç êàòî :
“Ñúçäàâàíåòî íà íîâè îáåêòè ñòàâà ÷ðåç èçïîëçâàíåòî íà íîâàòà îïåðàöèÿ.”
ßâíî íÿêîé òàêà å ðàçáðàë ùî å òî “the new operator”. 😉 Ìåæäó äðóãîòî íàâñÿêúäå å ïðåâåäåíî ïî òîçè íà÷èí!
 åäèí ìîìåíò çàïî÷íà äà ìè ñå íàáèâà íà î÷è è ñìåñâàíåòî íà òåðìèíèòå êëàñ è îáåêò êàòî íàïðèìåð òóê:
“Áàçîâèÿò êëàñ å îñîáåí òèï îáåêò, êîéòî ôîðìèðà îñíîâàòà íà äðóãè êëàñîâå.”
Ïî-íàòàòúê àâòîðèòå íè óáåæäàâàò, ÷å AWT å âúçíèêíàëà ïîíåæå Netscape íå áèëè ñúãëàñíè ñ ðàçëè÷íèÿ “âèä è óñåùàíå” íà ãðàôè÷íèòå êîìïîíåíòè – à òîâà åäèíñòâåíî ïðåäëàãàëà ñúùåñòâóâàùàòà äî ìîìåíòà áèáëèîòåêà Swing. Äî êîëêîòî çíàì Swing å ïî-íîâàòà áèáëèîòåêà, òàêà ÷å íÿìà êà äà å ïðè÷èíà çà âúçíèêâàíåòî íà AWT!
Ñòèãíàõ è äî íèøêèòå. Âúâåæäàò ñå äâàòà íà÷èíà çà ñúçäàâàíå íà íèøêè – ÷ðåç íàñëåäÿâàíå íà Thread; ÷ðåç èìïëåìåíòèðàíå íà èíòåðôåéñà Runnable è èçïîëçâàíå íà êîíñòðóêòîðà Thread(Runnable). Ñïîðåä àâòîðà íàñëåäÿâàíåòî íà Thread å ìåòîä, êîéòî íè
“âðúùà îáðàòíî â äíèòå íà ñòðóêòóðíîòî ïðîãðàìèðàíå”
– å òîâà èñêàì äà ìè ãî îáÿñíè ïî-ïîäðîáíî! Äà êàæå ïîäîáíî íåùî òî÷íî çà åäèí îò òðèòå ïèëîíà, íà êîéòî ñå ãðàäè èäåÿòà íà îáåêòíî-îðèåíòèðàíîòî ïðîãðàìèðàíå!
Îñâåí òîâà óñòàíîâèõ, ÷å ãðåøêèòå â êîäà ñå óâåëè÷àâàò ñ áðîÿ íà ñòðàíèöèòå è ñëåä ïðîâåðêà íà êîìåíòàðèòå çà êíèãàòà â Amazon óñòàíîâèõ, ÷å è â àíãëèéñêîòî èçäàíèå ñè ïðèñúñòâàò – êîäúò å óæàñíî ãðîçíî òàáóëèðàí (òðóäíî ÷åòèì), ñ “;” ñëåä äåôèíèöèÿòà íà êëàñà êàêòî è ñëåä äåôèíèöèÿòà íà ïîñëåäíèÿ ìåòîä â êëàñà (?!).
Íå ìîãà äà íå öèòèðàì îáÿñíåíèåòî çà òîâà ùî å èíòåðïðåòàöèÿ íà êîäà :
“Ñïîìíåòå ñè, ÷å Java å èíòåðïðåòèðàí åçèê. Òîâà îçíà÷àâà, ÷å êîäúò, êîéòî ðàçðàáîòâàòå, ñå êîìïèëèðà â áàéòîâ êîä ñàìî íàïîëîâèíà. Áàéòîâèÿò êîä ñå òðàíñëèðà ñëåä òîâà îò ëîêàëíàòà âèðòóàëíà ìàøèíà â ìåñòåí êîä. Íàêðàÿ, òîçè ìåñòåí êîä ñå ñòàðòèðà íà âàøàòà ìàøèíà.”
Ðåøèõ âñå ïàê äà ïîãëåäíà è íàòàòúê – îò ëþáîïèòñòâî. Òàêà èëè èíà÷å áÿõ ìèíàëà âå÷å â ñúñòîÿíèåòî “Îòêðèâàíå íà áèñåðè” ðŸ™‚ Òà îòãúðíàõ ãëàâà òðåòà, îçàãëàâåíà “Java ñîêåòè è URL” – è áèñåðèòå íàèñòèíà íå ñåêíàõà 🙂 Öèòèðàì :
“ ñúðöåâèíàòà íà âñè÷êè TCP è UDP êîìóíèêàöèè å âèðòóàëíîòî óñòðîéñòâî, íàðå÷åíî ñîêåò èëè ïîðò…. â TCP/IP îïðåäåëåíè ñîêåòè ñà ïîñâåòåíè íà ñïåöèôè÷íèòå äîãîâîðåíè óñëóãè. Àêî òðÿáâà äà ïîãëåäíåì íà ïàêåòíî íèâî, ùå âèäèì, ÷å ñîêåòúò ñå èäåíòèôèöèðà îò 16-áèòîâî ÷èñëî, îò êúäåòî èçëèçà, ÷å ðàçïîëàãàìå ñ îêîëî 65,000 âúçìîæíè ñîêåòà. Ïúðâèòå 1024 ñîêåòà ñà ïîñâåòåíè íà ñïåöèôè÷íè äîãîâîðåíè óñëóãè è ñå íàðè÷àò äîáðå ïîçíàòè ïîðòîâå.”
Å, ÿâíî çà àâòîðèòå íÿìà ðàçëèêà ìåæäó ñîêåò è ïîðò. Ïúê è çàùî äà ñè óñëîæíÿâàìå æèâîòà è äà âêëþ÷âàìå è IP àäðåñà â ñîêåòà, êàòî ïîðòà å äîñòàòú÷åí? 🙂 Êîÿ ëè å òàÿ ìàøèíà, íà êîÿòî íà åäèí ïîðò ñå âúðçâàò åäíîâðåìåííî íÿêîëêî ðàçëè÷íè îòäàëå÷åíè ìàøèíè, ÷å äà íè òðÿáâà è IP-òî äà ðàçãðàíè÷èì ñîêåòèòå åäèí îò äðóã? 😉
×åñòíî êàçàíî íå ñìÿòàì äà õàáÿ ïîâå÷å âðåìå äà ðàçãëåæäàì òàçè êíèãà è ñúâåòâàì è âàñ äîðè è çà òåçè ïàðè äà íå ñè ÿ êóïóâàòå! Îñâåí àêî íå èñêàòå äà ñå ñäîáèåòå ñ êîëåêöèÿ áèñåðè ðàçáèðà ñå – çà òîâà å ìíîãî ïîäõîäÿùà. Àç ëè÷íî îáà÷å íå ñìÿòàì (âúïðåêè, ÷å ñðåä èäíèòå òåìè èìà èíòåðåñíè òàêèâà) äà ðèñêóâàì äà áúäà èçëúãàíà çà åëåìåíòàðíè íåùà – êîåòî çàáåëÿçâàì å ïðàêòèêà â ïúðâèòå ãëàâè. Ñåãà ñå ñåòèõ è çà íåùî äðóãî : àâòîðúò (ÿâíî ïðåïîäàâàòåëÿò) îáÿñíÿâà, ÷å DNS å åäèí îò òåðìèíèòå, êîéòî âñåêè ÷óâà îùå ïðè ïúðâàòà ñè “ñðåùà” ñ Èíòåðíåò. Íî å ñúùî òàêà åäèí îò òåðìèíèòå, êîéòî ðàçáèðà äîñòà êúñíî. Ñàìèÿò òîé ïðèçíàâà, ÷å ñè å ïîñòàâèë çà öåë äà ðàçáåðå êàêâî å DNS êîãàòî çàïî÷íàë äà âîäè ëåêöèè çà Ìðåæîâî ïðîãðàìèðàíå è åäèí ñòóäåíò ãî ïèòàë êàê ñå ïðàâè âðúçêàòà ìåæäó “äåñåòè÷íàòà âåðñèÿ ñ òî÷êè” ñ “IP äóìàòà ñ òî÷êè” … Ìîæå áè òîâà îáÿñíÿâà ìíîãî íåùà!