Даннаявводнаяглавапосвящаетсянекакому—токонкретномуаспектуязыка,以及Javaвцелом,расссказа Эккельздравопроводитсравнениесдругимиязыкамиипрямоговорит,чтоJavaподходитнедлявсех,в Какойязыкизучать—решатьтольковам。
Развитиеабстракции
Javaявляетсяпонятиеобъекта的语言。 Объект —абстрактнаясущность,элементпространствазадачиипространстварешения。 Плюсыобъектоввтом,чтоонинаподходысихприменениемненакладываютсяограничениоооинтер。 Объектныйподходпозволяетнамприблизитьсяименнокзадачеанеккомпьютеру,какделаютпроцедурныеязыки.Каждыйобъектявляетсямаленькимкомпьютером,позволяющимвыполнятьоперации,которыепозволяетсяпроизводить。
АланКейвыделилнесколькопунктов,касающихсяобъектов(дляязыкаSmllTalk —первогоудачногоООПязы。 Онговоритотом,чтовсёявляетсяобъектом,объектыимеюттип(класс),объектымогутсодержатьдругихобъекты,каждыеобъектыодноготипамогутсодержатьодинаковыесообщения,асамапрограмма – этонаборобъектов,указывающихдругдругучтоделать。
Бучговорит,чтообъектобладаетповедением,состояниемииндивидуальностью。
Объектобладаетинтерфейсом
АбстрактныетипыданныхиихсозданиеявляетсяключевымпонятиемООП。
Однойизтакихабстракцийявляетсякласс—онопределяетсущностьобъектаиегоповедение。
ОднойизсамыхбольшихсложностейвООПявляетсясоответствиемеждуобъектомпространоваеа
Реализация —кодискрытыеданные。
Интерфейсопределяетзапросы,которыевыможетепосылать。
UML(统一建模语言):
основнаяконструкция

Сверху—названиекласса,затемполяданныхиинтерфейс。 Двепоследниечастимогутопускаться。
Объектпредоставляетуслуги
ДлялучшегопониманияЭккельсоветуетпредставлятьобъекткакпоставщикуслуг。 Объектпомогаетсамальданныеифункциональностьнаконцептуальномуровне。
Такжеважнонепытаться“впихнуть”всёводинклассилиинтерфейс。 Хорошонаписанныйкодможнопотомиспользоватьвдальнейшем。
Скрытаяреализация
Программисты,поЭккелю,делятсянадватипа – программисты – создателиклассовипрограммисты – пользователи(соответственно – те,которыеиспользуютэтиклассы)。
Важностьограничениядоступа:
–мы“уберегаем”хрупкиечастикодаотпрограммиста-клиента;
–состороныпрограммиста—создателяклассовмыможемизменитьбиблиотекунебеспокоесьотом
Java的Спецификаторыдоступа—公共,私有,受保护的程序包。
Повторноеиспользованиереализации。 Агрегированиеикомпозиция
ООП,какупоминалосьвыше,даётявныепреимуществавповторномприменениикода。 Хорошонаписанныйкодможноиспользоватьстолькораз,сколькооннеобходимдлязадачи。
Введёмдваопределения:
Композиция —составлениеклассовизужесуществующихклассов。
Агрегирование —динамическаякомпозиция。
Композиции,еслисравниватьихснаследованием,намногопрощеигибче。

Наследование
Наследованиебыловведенодлятого,чтобынепеределыватьработу,еслимыхотимсокдатьпохожий。

Существуетдваспособаизменитьбазовыйтип—унаследовавего-переопределитьилирасширить。 Прирасширенииклассможноописатькак“похожийна”(например,класс“ Renaut”похожнакласс“Машина”)。 Припереопределенииклассописываетсясловом“является”(“Круг”является“Фигурой”)。 Припереопределенииможетвозникнутьситуация,когдавсеметодыполностьюзаменяются。 Подходследуетвыбиратьисходяизпотребностейзадачи。
Базовыйтиппозволяетсовместитьобщиечерты,以及производныйтип—图库社论照片
Спомощьюнаследованиямыможемсоставитьиерархиютипов,описывающуюрешаемуюзадачувконтекстее。
Взаимозаменяемыеобъектыиполиморфизм
БезпривязкикJava,существуютмеханизмыраннегоипозднегосвязывания。 Раннеесвязываниеэто “привязка”адресакучасткукода。 Механизмпозднегосвязывания(Java)говоритнамоттом,чтопрограммадомонеата Объектрешает,чтоснимделать。
Внекоторыхслучаяхвозникаетвосходящеепреобразование—обращениеспроизводнымтипомкаксба。

Однокорневаяиерархия
Javaунаследованыоткласса对象(т.е.имеютодинкорень)。
Плюсытакогоподхода:
–хранениеобъектовводной“куче”;
–болеепростая“уборкамусора”;
–упрощениепередачиаргументов;
C ++,кпримеру,класс对象ненаследуется。 Вэтоместькакпреимущества,такинедостатки。 Сложнописатьновыйкод(многоенужнодописывать),нолегчедобавлятьновыйфункционалвстарый。
Контейнеры
Java的Контейнеры,它是померенеобходимости的首字母缩写。 Внихсначалапомещаетсяобъект,азатем,принеобходимости,извлекается(производитсявыборка)。
Ихплюсы:
–разныеконтейнерыпо—разномувыполняютодинаковыеоперации–даётгибкость;
–контейнерыпредставляютразличныеинтерфейсыивозможностивзаимодействия。
Примерыконтейнеров—地图,列表,集合等
Параметризованныетипы
—тобыпреобразоватьобъектккакому-тодругомутипу,необходимовыполнитьнисходящеепреобразова。 Нонужнобытьосторожным—нисходящеепреобразованиебезопаснотолькотогда,когдавыеа
Параметризованныетипыпомогаютнамне“запоминать”типобъекта。 Классыавтоматическиадаптируютсядляработыстипами。
Созданиеивремяжизниобъектов
Времяжизниобъектанеобходимоконтролироватьдлятого,чтобыэффективноиспользоватьпамятьком。
Существуетдваподходакудалениюобъектов-один-времянаписанияпрограммы,второй-впроцессе。 Приудалениивовремянаписанияпрограммысамкодтеряетгибкость。 ВJavaжеиспользуетсяводход—спомощьюnewобразуетсядинамическийэкземплярипомещаетсявку。 Далеедляудаленияобъектовдействуетмеханизмуборкимусора。
Обработкаисключений:борьбасошибками
МеханизмобработкиисключенийобычновстраиваетсявсамязыкилиОС。
Исключение —этообъект,которыйгенерируетсянаместепоявленияошибки。
Java的Плюсыобработкиисключений:
–онивсегдаобрабатываются;
–какследствие,повышаетсянадёжностьпрограммы,т.к。 мыможемнепрерыватьеё,以及простообработатьисключения。
Параллельноевыполнение
JavaзыкJavaподдерживаетмногопоточность。 Потоки— раздельновыполняемыечастикода。
астоможноуслышать,чтопотокивыполняютсяодновременно,нонасамомделепроисходотоооониепсе Процессорразделяетсвоиресурсы,выдаваякаждомупотокуквантвремени。 Вмногоядерныхсистемахпотокинасамомделемогутвыполнятьсяодновременно。
ВJavaпотокиивзаимодействиеснимиреализованонахорошемуровне。 Нонужнобытьвнимательнымистемиресурсами,которыеиспользуютсясовместно,непозоонтенять
Java和интернет。 WebтотакоеWeb?
Вычисления“клиент—сервер”

Архитектура“клиент—сервер” —архитектура,вкоторойклиентыпосылаютзапросы,аединыйсерверна。 Связкойявляется中间件(связующееПО)。
Прииспользованииподобнойархитектурывозникаетсложность—придоступенасервердвухилибллеекл Проблемарешаетсяпрограммированиемнасторонеклиента,либоонасторонесервера。
Web。ДляболеегибкогоподходаиспользуетсяWeb。 Webмыможемспокойнорассматриватькакгигантскийсервер。
Программированиенасторонеклиента
Сначалаподдержкаинтерактивноситбылаполностьювозложенанасервер。 ТакаяподдержкаосуществляласьспомощьюCGI(通用网关接口),ноэтооказалосьнеэффективноизооенон
Подходыкрешениюпроблем:
–плагины-добавляютвбраузерыновуюфункциональность;
–языкисценариев—нетаксложныипозволяютбыстрописатькод。
80%的клиентскогопрограммированияпокрываютязыкисценариев,20岁。 Например,Java。
标记Javaсводитсякдвумобластям— Java Web Start。 Апплеты— миниприложения,исполняемыевнутрибраузера。 Плюсыиспользования的Javaвпрограммированиинасторонеклиента – повышениескоростииотзывчивостиприложенийиуменьшениенагрузкиосновногосетевоготранспортаисерверов。
АльтернативыдляWeb —программирования
АпплетывJava,ксожалению,неоправдалипервоначальныхожиданий,
关于ActionScript和MacromediaFlex的详细信息—支持конкретномубраузеру。
.Net和C#
.Net和C#微软。 C#Java,.Net — JVM。C#можносравнитьс。 Javaтиязыкитакжечастоиспользуются,ноонинестолькроссплатформенны,какJava。
Интернетиинтрасети
Интрасеть —сеть,использующаяпродуктыWebвнутриорганизации。 Длязадачинтрасетинужнообъективнооцениватьпоставленныезадачисточкизрения“затраты/прибыл”。
Программированиенасторонесервера
СерверноепрограммированиесчитаетсясильнойсторонойJava。 Главнойзадачейтакогопрограммированияявляетсярешатьзадачиобработкинасторонесерверов。 Этоделаетсяпомощьюсервлетов。
Резюме
Процедурныеязыкипрограммированияориентированывбольшеймаренакомпьютер,чемназадачу。 Javaпытаетсястеретьэтиграницыиизменитьнаправлениеименноназадачуспомощьюобъектно-ориентроо。
КоднаJavaлегчепонять,хотьиногдаониполучаетсядлиннее。
ПлюсыJava:
–многиезадачиужерешенывсуществующихбиблиотеках;
–переносимость;
–работасисключениями;
–многочисленныеразработкистороннихфирм;
АвтортакжесоветуетизучитьязыкPython —помнениюавтора,оненболееприспособлендляудобствапрогр。
Наэтомзавершаюобзорпервойглавы。 Доновыйвстреч!