Книга е още в много ранна фаза на написване



страница5/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   2   3   4   5   6   7   8   9   ...   73

Цели


Като моята предишна книга Thinking in C++, тази книга също беше струк­ту­ри­ра­на около изучаването на програмния език. В частност моята мотивация е да съз­дам нещо, което ще ми помага в моите семинари. Когато мисля за дадена глава на книгата аз го правя имайки пред вид как ще стане един добър урок. Цел­та ми е да получа материала на порции, които могат да се предадат за едно съ­биране, следвани от упражнения, които могат да бъдат направени в обста­нов­ка­та на семинара.

Целите ми в тази книга са да:



  1. Представя материала в кратки стъпки, смилаеми преди да се продължи нататък.

  2. Използвам примери, които са колкото е възможно по-кратки. Това по­ня­кога пречи да се изследват проблеми, които са близки до реалните, но съм забелязал, че начинаещите са по-щастливи да разберат всеки детайл от решението на задачата, отколкото ако са впечатлени от дълбочината на решавания от тях проблем. Също има ясна граница на обема на кода, кой­то може да бъде предаден в една класна стая. Поради тази причина не може да няма критики към мен заради “дребни” примери, но аз ги прие­мам като помощ в опита ми да създам нещо педагогически по­лез­но.

  3. Внимателно да подбера последователността на представяне на чертите на езика така, че читателят да не вижда неща, които още не са обяс­ня­ва­ни. Разбира се, това не винаги е възможно, но винаги съм се старал да има поне кратко въведение.

  4. Да дам това, което е полезно да се знае за езика, а не всичко. Аз вярвам, че има йерархия в знанията и с 95% от тях никога не се сблъсква обик­но­вения програмист. За пример от езика C, ако запомните наизуст та­бли­цата за приоритет на операциите (аз никога не я научих), можете да пи­шете умен код. Ако обаче я използувате, това ще затрудни човека, че­тящ кода. Така че забравяме за приоритета и използуваме скоби на­вся­къде, където нещата не са ясни без тях.

  5. Държа фокуса във всяка лекция така, че времето между две лекции – и съответните упражнения – да бъде малко. Това не само държи слу­ша­те­лите по-акнивни и ангажирани по време на семинара, но и дава на чи­та­теля повече чувство за завършеност.

  6. Дам солидна основа за решаване на сложни задачи и четене на други кни­ги.

Онлайн документация


Езикът Java и библиотеки идват от Sun Microsystems (може да се снемат безплатно) в електронна форма, читаема с практически всеки броузър и при­бли­зително същата степен на документираност имат и доставките от други раз­ра­ботчици. Почти всички книги за Java дублицират тази документация. Така че вие или вече имате документация или можете лесно да си я свалите и тази книга ня­ма да я повтаря, освен където това е необходимо, понеже обикновено е много по-бързо да си свалиш документацията от Мрежата, отколкото да ровиш в книга за нея. (Плюс че ще бъде последна версия.) тази книга ще дава до­пъл­ни­тел­ни описания на класовете само където това е необходимо за разбиране на кон­кретните примери.

Глави


Тази книга е проектирана като е имано пред вид само едно нещо: как хората учат Java. Обратната връзка от семинарите ми позволи да ведя кои неща са труд­ни за усвояване и се нуждаят от подробно разглеждане. В местата където твър­де амбициозно бях включил прекалено много нови неща изведнъж аз мо­жах да узная – чрез процеса на представяне на материала – че при това по­ло­же­ние те всичките трябва да бъдат обяснени и това на свой ред лесно довежда обу­чаваните до неразбиране или отказ да учат. В резултат на това знание съм хвър­лил много труд да направя въвеждането на колкото е възможно по-малко но­ви неща във всяка отделна стъпка.

Целта, тогава, е във всяка глава да се опише нова черта на езика или няколко близ­ки, свързани черти, без да се използуват такива, които са непознати до този мо­менти. По този начин може да бъде асимилиран материалът напълно при вся­ка стъпка, преди да се продължи нататък.

Ето кратко описание на главите в тази книга, което съответства на моя опит от се­минарите и упражненията:

Глава 1: Въведение в обектите

Тази глава е за всичко, което е предмет на обектно-ориентираното про­грамиране, вкл. основния въпрос “Що е обект?”, интерфейс и раз­ли­ките му с приложение, абстракция и капсулиране, съобщения и функ­ции, наследяване и композиция и важния за всичко поли­мор­фи­зъм. Също има въведение в създаването на обекти с конструктори, къ­де живее обектът, къде да ги сложим като са веднъж създадени и ма­ги­ческият “събирач на боклук” който почиства от обектите щом те ве­че не са нужни. И други неща се въвеждат, включително обработката на грешки с изключения, многонишковост за потребителски интер­фейси, които “не губят говор”, мрежи и Мрежата. Ще научите какво пра­ви Java специален, защо той бива толкова успешен и за обектно-ориен­тираните анализ и проектиране.

Глава 2: Всичко е обект

Тази глава ви довежда до точката, където ще може да напишете пър­ва­та си програма така че главата дава общ поглед върху основните не­ща, включително концепцията за “дръжка” (манипулатор, който по съ­щество е указател – б.пр.) към обект; как да се създаде обект; въ­ве­де­ние към първичните типове и масиви; обхват и как обектите биват раз­рушавани от боклучаря; как всичко във Java е нов даннов тип (class) и как да създавате маши собствени класове; функции, аргу­мен­ти и връщани стойности; видимост на имената и използуване на кла­со­ве зададени извън текущия файл; ключовата дума static; ко­мен­та­ри и вградена документация.



Глава 3: Управление хода на програмата

Тази глава започва с всичките оператори, които идват от C и C++. В до­бавка ще намерите общите клопки, превръщания, промоции и прио­ри­тет. Това е последвано от основните оператори за управление хода на програмата, които са общи за проктически всички езици за про­гра­ми­ране: избор с if-else; цикли с for и while; излизане от цикъл с break и continue както и етикетираните такива в Java (които заместват “лип­сващия goto” в Java); избор чрез switch. Въпреки че повечето такъв ма­териал има общи точки в C и C++ , има някои разлики. В добавка всич­ките примери ще са пълни Java примери така че по-добре ще усвои­те как изглежда Java.



Глава 4: Инициализация и разчистване

Тази глава започва с въвеждането на конструктор, който гарантира пра­вилна инициализация. Дефиницията на конструктор води до кон­цеп­цията за презареждане на функции (бихме могли да искаме ня­кол­ко конструктора). Това е последвано от дискусия за разчистването (пре­ди излизане – б.пр.), което не винаги е толкова просто, колкото из­глежда. Нормално просто зарязвате обекта когато повече не е необ­хо­дим и като мине боклучаря, почиства всичко, освобождовойки па­мет­та. Тази част изследва боклучаря и някои негови особености, идио­син­карзии. Главата завършва с по-близък поглед към инициа­ли­за­ция­та: автоматична инициализация на членове, задаване на инициа­ли­за­ция, реда на инициализация, static инициализация и инициа­ли­за­ция на масиви.



Глава 5: Скриване на реализацията

Тази глава разглежда как се свързват заедно парчетата код и как някои ча­сти от библиотека са видими докато други са скрити. Тя започва с раз­глеждането на ключовите думи package и import, които по­зво­ляват опаковането на файлово ниво и позволяват създаването на би­блио­теки от класове. Въпросът с каталожните пътища и файловите име­на също е разгледан. Останалата част от главата разглежда клю­чо­ви­те думи public, private и protected, концепцията за “прия­телски” достъп и какво различните нива на достъп означават, кога­то са в различен контекст.



Глава 6: Повторно използуване на класове

Концепцията за наследяване се споделя от практически всички OOP ези­ци. Това е начин да се вземе съществуващ клас и да се разшири не­го­вата функционалност (както и да се промени, темата на Глава 7). На­сле­дяването е често начин да се използува повторно код, като се оста­ви “базовия клас” същия и само се променят някои неща тук и там за по­стигане на целите. Наследяването обаче не е единствения начин да се получат нови класове от съществуващи такива. Може също да се вгра­ди един клас в друг чрез композиция. В тази глава ще научите за те­зи две техники на повторно използуване на кода в Java и как да ги из­ползувате.



Глава 7: Полиморфизъм

Самички бихте могли да изразходвате девет месеца за откриване и раз­биране на полиморфизма, крайъгълен камък на OOP. Чрез малки, про­сти примери ще се научите как да създавате семейство типове чрез на­следяване и как да манипулирате обектите им чрез базовия клас. По­ли­морфизмът на Java позволява да се третират всички обекти от един тип генетично, което значи, че вашият код не зависи от спе­ци­фич­на за типа информация. Това прави програмите ви разширяеми, та­ка че произвеждането и управлението на програмните проекти е по-лес­но и управляемо. В добавка Java дава трети път да се устрои пов­тор­но използуване на кода чрез интерфейс, което е чиста абстракция на интерфейс на обект. Веднъж като сте станали наясно с поли­мор­физ­ма интерфейсите са лесни за разбиране. Тази глава също въвежда въ­трешни класове на Java 1.1.



Глава 8: Владеене на обекти

Доста проста е всяка програма, която има фиксирано число обекти с известно време на живот. Изобщо, вашите програми ще създават най-различни обекти които ще бъдат ясни чак по времето, когато програмите работят. В добавка вие не бихте искали да знаете даже типа на обектите чак до пускането на програмата. За да решите общия проблем трябва да можете да създавате неограничено количество обекти, навсякъде, по всяко време. Тази глава дълбоко разглежда колекциите, които Java 2 доставя за да владеете обектите докато работите с тях: прости масиви и по-засукани колекции (структури от данни) като ArrayList и HashMap.



Глава 9: Обработка на грешки с изключения

Основна философия в Java е, че лошо написан код не трябва да бъде пу­скан. Компилаторът хваща проблемите доколкото е възможно, но по­ня­кога проблемите – били те програмни грешки или естествени съ­стоя­ния, възникващи в някои случаи при изпълнение на програмата – мо­гат да бъдат хванати и обработени само по време на изпълнение. Java има exception handling да се разправя с всякакви проблеми, кои­то възникват, когато програмата работи. Тази глава разглежда как клю­човите думи try, catch, throw, throws и finally ра­бо­тят в Java; кога трябва да изхвърлите изключение и какво да пра­ви­те, когато го хванете. В добавка ще видите стандартните изключения в езика, как да създавате собствени, какво става с изключенията в кон­струк­торите и как се намира кодът, който да обработи изключенията.



Глава 10: Вхадна-изходна система на Java

Теоретично всяка програма прави три неща: вход, обработка и изход. Това предполага, че IO (вход/изход) е доста важна част от темата. В та­зи глава ще видите различни входно-изходни класове които Java има за четене на файлове, блокове памет и конзолата. Разликата меж­ду “стария” IO и “новия” Java 1.1 IO ще бъде показана. В добавка тук ще се покаже вземане на обект, неговия “streaming” (така че да може да бъде пратен на диск през мрежата) и реконструкцията му, което се пра­ви за вас от Java версия 1.1. Също се разглеждат компресираните би­блио­теки на Java 1.1, които се използуват в Java Archive файлов фор­мат (JAR).

Глава 11: Идентификация на типа по време на изпълнение

Идентификацията на типа по време на изпълнение в Java (RTTI) ви да­ва възможност да установите точния тип на обекта, ако само имате до­стъп до базовия тип. Нормално ще се стремите да не се занимавате с конкретни типове и ще оставите полиморфизмът (който е вграден в ези­ка) да върши това. Но понякога е много полезно да може да узна­ете конкретния тип на обекта. Често тази информация позволява да се на­правят някои специални операции по-ефективни. Тази глава обяс­ня­ва за какво е RTTI, как да се използва и как да се отървем от него, ко­га­то вече не е необходимо. В добавка се разглежда рефлексията - чер­та на Java 1.1.



Глава 12: Предаване и връщане на обекти

Доколкото единствения начин да комуникирате с обектите в езика е чрез “handles,” концепцията за предаване на обект като параметър на функ­ция и връщането на обект като резултат от функция има инте­рес­ни продължения. Тази глава обяснява как да управлявате обекти ко­га­то влизате или излизате от функция и също показва класа String кой­то използува различен подход към проблема.



Глава 13: Създаване на прозорци и аплети

Java идва със “Swing” GUI библиотеката, която е множество от кла­со­ве, които поддържат създаването и управлението на прозорци по пре­но­сим начин; тези програми могат да бъдат както аплети, така и са­мо­стоя­телни програми. Тази глава е въведение в Swing създаване на апле­ти за World Wide Web. Важната “Java Beans” технология е въ­ве­де­на. Тя е от основно значение за създаване на Rapid-Application De­ve­lop­ment (RAD) инструменти за създаване на програми.



Глава 14: Многонишковост

Java има възможност да изпълнява едновременно няколко подзадачи в рамките на една програма, наречени нишки. (Докато нямате няколко про­цесора във вашата инсталация само изглежда че се работят едно­вре­­менно.) Въпреки че могат да се използуват навсякъде, нишките са най-полезни например в случай, че искате да направите потребителски интер­фейс такъв, че да може да се натискат клавиши или въвеждат дан­ни докато се изпълнява някакъв друг конкретен процес. Тази глава по­глежда и към синтаксиса и семантиката на многонишковостта в Java.



Глава 15: Мрежово програмиране

Всички черти на Java и библиотеките сякаш се обединяват когато за­поч­нете да разработвате програми за работа в мрежи. Тази глава из­след­ва комуникациите по Мрежата и класовете, които езикът доставя за улеснение на тази работа. Тук също се разглежда как да се създаде Java аплет кайто да взаимодейства с common gateway interface (CGI) про­грама, показва как да се пишат CGI програми на C++, обхваща Java DataBase Connectivity (JDBC) и Remote Method Invocation (RMI) в Java 1.1.

Глава 16: Шаблони

Тази глава въвежда много важния и още не традиционен подход с “ша­блони”. Изучава се примерна еволюция на процеса на проек­ти­ра­не, започвайки от начално състояние и движейки се през логиката и при­движвнето на проекта до по-подходящи състояния на разработка. Ще видите начин, който разработката може да материализира с те­че­ние на времето.



Глава 17: Проекти

Таза глава включва проекти, които са свързани с материала от цялата кни­га или по някаква друга причина не са могли да бъдат включени м по-ранните глави. Тези проекти са значително по-сложни от оста­на­ли­те примери в главите и често демонстрират допълнителни черти и тех­ни­ки на езика и библиотеките.

Има теми, които не могат да се включат в никоя глава. Те са засегнати в приложенията.

Приложение A:Използване на не-Java код

Една напълно преносима Java програма има сериозни недостатъци: ско­ростта и невъзможността да се използуват специфични за дадена плат­форма услуги. Когато платформата е известна, възможно е дра­ма­тич­но да се ускорят някои операции, като се направят native methods, кои­то са функции, написани на друг програмен език (в момента се под­държат само C/C++). Има и други пътища Java да поддържа не-Java код, включително CORBA. Това приложение прави достатъчно въ­веждане във въпроса, така че да може да се построят прости про­гра­ми, които взаимодействат с не-Java код.



Приложение B:Сравнение на C++ с Java

Ако сте C++ програмист вие вече имате основната идея за обектно-ориен­тираното програмиране и несъмнено синтаксисът на Java ви е до­ста познат. Това има смисъл понеже Javaпроизлезе от C++. Има оба­че изненадващо много разлики между C++ и Java. Тези разлики са на­правени с намерение да се подобри езикът и ако ги разберете, вие ще знаете защо новият език е така успешен. Това приложение ви води през основните черти, които правят Java различен от C++.



Приложение C:Правила за програмиране на Java

Това приложение съдържа правила, които да ви помагат при разработ­ва­нето на проекти на ниско ниво и писането на код.



Приложение D:Изпълнение

Това ще ви помогне да намерите причините за задръствания и да по­ви­­­шите скоростта на изпълнение на програмите си.



Приложение E:Малко за събирането на отпадъците

Тази глава описва операциите и подходите при освобождаването на па­метта, заета от вече ненужни обекти.



Приложение F:Препоръчано за четене

Списък на книги за Java които смятам, че биха били полезни.





Сподели с приятели:
1   2   3   4   5   6   7   8   9   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница