Цели
Като моята предишна книга Thinking in C++, тази книга също беше структурирана около изучаването на програмния език. В частност моята мотивация е да създам нещо, което ще ми помага в моите семинари. Когато мисля за дадена глава на книгата аз го правя имайки пред вид как ще стане един добър урок. Целта ми е да получа материала на порции, които могат да се предадат за едно събиране, следвани от упражнения, които могат да бъдат направени в обстановката на семинара.
Целите ми в тази книга са да:
-
Представя материала в кратки стъпки, смилаеми преди да се продължи нататък.
-
Използвам примери, които са колкото е възможно по-кратки. Това понякога пречи да се изследват проблеми, които са близки до реалните, но съм забелязал, че начинаещите са по-щастливи да разберат всеки детайл от решението на задачата, отколкото ако са впечатлени от дълбочината на решавания от тях проблем. Също има ясна граница на обема на кода, който може да бъде предаден в една класна стая. Поради тази причина не може да няма критики към мен заради “дребни” примери, но аз ги приемам като помощ в опита ми да създам нещо педагогически полезно.
-
Внимателно да подбера последователността на представяне на чертите на езика така, че читателят да не вижда неща, които още не са обяснявани. Разбира се, това не винаги е възможно, но винаги съм се старал да има поне кратко въведение.
-
Да дам това, което е полезно да се знае за езика, а не всичко. Аз вярвам, че има йерархия в знанията и с 95% от тях никога не се сблъсква обикновения програмист. За пример от езика C, ако запомните наизуст таблицата за приоритет на операциите (аз никога не я научих), можете да пишете умен код. Ако обаче я използувате, това ще затрудни човека, четящ кода. Така че забравяме за приоритета и използуваме скоби навсякъде, където нещата не са ясни без тях.
-
Държа фокуса във всяка лекция така, че времето между две лекции – и съответните упражнения – да бъде малко. Това не само държи слушателите по-акнивни и ангажирани по време на семинара, но и дава на читателя повече чувство за завършеност.
-
Дам солидна основа за решаване на сложни задачи и четене на други книги.
Онлайн документация
Езикът 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 Development (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 които смятам, че биха били полезни.
Сподели с приятели: |