Объектно Ориентированное Программирование. Настольная книга программиста
Покупка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
СОЛОН-Пресс
Автор:
Комлев Николай Юрьевич
Год издания: 2022
Кол-во страниц: 298
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-91359-276-7
Артикул: 484607.04.99
Объектно Ориентированное Программирование (ООП) - технология, которую обязан знать, понимать и применять каждый программист. Печально, но многие программисты не знают, не понимают и не применяют. А многие, что ещё хуже, - находятся в заблуждении, что знают, понимают и применяют. Из этой книги вы узнаете всё, что надо знать об ООП - и даже немного больше. Кратко, понятно, с примерами. Для умных людей.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Ʉɨɦɥɟɜ ɇ. ɘ. Ɉɛɴɟɤɬɧɨ Ɉɪɢɟɧɬɢɪɨɜɚɧɧɨɟ ɉɪɨɝɪɚɦɦɢɪɨɜɚɧɢɟ ɇɚɫɬɨɥɶɧɚɹ ɤɧɢɝɚ ɩɪɨɝɪɚɦɦɢɫɬɚ ɋɈɅɈɇ-ɉɪɟɫɫ Ɇɨɫɤɜɚ 2022
ɍȾɄ 681.3 ȻȻɄ 32.973-18 Ʉ 63 Ʉɨɦɥɟɜ ɇ. ɘ. Ɉɛɴɟɤɬɧɨ Ɉɪɢɟɧɬɢɪɨɜɚɧɧɨɟ ɉɪɨɝɪɚɦɦɢɪɨɜɚɧɢɟ. ɇɚɫɬɨɥɶɧɚɹ ɤɧɢɝɚ ɩɪɨɝɪɚɦɦɢɫɬɚ. — Ɇ.: ɋɈɅɈɇ-ɉɪɟɫɫ, 2022. — 298 ɫ.: ɢɥ. ISBN 978-5-91359-276-7 Ɉɛɴɟɤɬɧɨ Ɉɪɢɟɧɬɢɪɨɜɚɧɧɨɟ ɉɪɨɝɪɚɦɦɢɪɨɜɚɧɢɟ (ɈɈɉ) — ɬɟɯɧɨɥɨɝɢɹ, ɤɨɬɨɪɭɸ ɨɛɹɡɚɧ ɡɧɚɬɶ, ɩɨɧɢɦɚɬɶ ɢ ɩɪɢɦɟɧɹɬɶ ɤɚɠɞɵɣ ɫɨɜɪɟɦɟɧɧɵɣ ɩɪɨɝɪɚɦɦɢɫɬ. ɉɟɱɚɥɶɧɨ, ɤɨɝɞɚ ɩɪɨɝɪɚɦɦɢɫɬɵ ɧɟ ɡɧɚɸɬ, ɧɟ ɩɨɧɢɦɚɸɬ ɢ ɧɟ ɩɪɢɦɟɧɹɸɬ, ɚ, ɱɬɨ ɟɳɺ ɯɭɠɟ, — ɧɚɯɨɞɹɬɫɹ ɜ ɡɚɛɥɭɠɞɟɧɢɢ, ɱɬɨ ɡɧɚɸɬ, ɩɨɧɢɦɚɸɬ ɢ ɩɪɢɦɟɧɹɸɬ. ɉɪɨɱɢɬɚɜ ɷɬɭ ɤɧɢɝɭ, ɜɵ ɭɡɧɚɟɬɟ ɜɫɺ, ɱɬɨ ɧɚɞɨ ɡɧɚɬɶ ɨɛ ɈɈɉ ɢ ɞɚɠɟ ɧɟɦɧɨɝɨ ɛɨɥɶɲɟ, ɱɬɨɛɵ ɢɫɩɨɥɶɡɨɜɚɬɶ ɷɬɭ ɬɟɯɧɨɥɨɝɢɸ ɜ ɫɜɨɟɣ ɪɚɛɨɬɟ. Ɇɚɬɟɪɢɚɥ ɢɡɥɨɠɟɧ ɜ ɤɪɚɬɤɨɣ, ɩɨɧɹɬɧɨɣ ɮɨɪɦɟ ɩɨ ɩɪɢɧɰɢɩɭ «ɨɬ ɩɪɨɫɬɨɝɨ ɤ ɫɥɨɠɧɨɦɭ» ɢ ɫɨɩɪɨɜɨɠɞɚɟɬɫɹ ɧɟɨɛɯɨɞɢɦɵɦɢ ɩɪɢɦɟɪɚɦɢ. Ʉɧɢɝɚ ɨɪɢɟɧɬɢɪɨɜɚɧɚ ɧɚ ɧɚɱɢɧɚɸɳɢɯ ɢ ɨɩɵɬɧɵɯ ɩɪɨɝɪɚɦɦɢɫɬɨɜ, ɩɪɟɩɨɞɚɜɚɬɟɥɟɣ ɢ ɫɬɭɞɟɧɬɨɜ ɜɭɡɨɜ, ɤɨɥɥɟɞɠɟɣ, ɭɱɢɬɟɥɟɣ ɢ ɭɱɚɳɢɯɫɹ ɲɤɨɥ. ɄɇɂȽȺ — ɉɈɑɌɈɃ Ʉɧɢɝɢ ɢɡɞɚɬɟɥɶɫɬɜɚ «ɋɈɅɈɇ-ɉɊȿɋɋ» ɦɨɠɧɨ ɡɚɤɚɡɚɬɶ ɢ ɨɩɥɚɬɢɬɶ ɜ ɢɡɞɚɬɟɥɶɫɬɜɟ ɫ ɩɟɪɟɫɵɥɤɨɣ ɉɨɱɬɨɣ ɊɎ. Ɂɚɤɚɡ ɦɨɠɧɨ ɨɮɨɪɦɢɬɶ ɨɞɧɢɦ ɢɡ ɩɟɪɟɱɢɫɥɟɧɧɵɯ ɫɩɨɫɨɛɨɜ: 1. Ɉɮɨɪɦɢɬɶ ɡɚɤɚɡ ɧɚ ɫɚɣɬɟ www.solon-press.ru ɜ ɪɚɡɞɟɥɟ «Ʉɧɢɝɚ — ɩɨɱɬɨɣ». 2. Ɂɚɤɚɡɚɬɶ ɤɧɢɝɭ ɩɨ ɬɟɥ. (495) 617-39-64, (495) 617-39-65. 3. Ɉɬɩɪɚɜɢɜ ɡɚɹɜɤɭ ɧɚ e-mail: kniga@solon-press.ru (ɭɤɚɡɚɬɶ ɧɚɢɦɟɧɨɜɚɧɢɟ ɢɡɞɚɧɢɹ, ɨɛɪɚɬɧɵɣ ɚɞɪɟɫ ɢ ɎɂɈ ɩɨɥɭɱɚɬɟɥɹ). 4. ɉɨɫɥɚɬɶ ɨɬɤɪɵɬɤɭ ɢɥɢ ɩɢɫɶɦɨ ɩɨ ɚɞɪɟɫɭ: 123001, Ɇɨɫɤɜɚ, ɚ/ɹ 82. ɉɪɢ ɨɮɨɪɦɥɟɧɢɢ ɡɚɤɚɡɚ ɫɥɟɞɭɟɬ ɩɪɚɜɢɥɶɧɨ ɢ ɩɨɥɧɨɫɬɶɸ ɭɤɚɡɚɬɶ ɚɞɪɟɫ, ɩɨ ɤɨɬɨɪɨɦɭ ɞɨɥɠɧɵ ɛɵɬɶ ɜɵɫɥɚɧɵ ɤɧɢɝɢ, ɚ ɬɚɤɠɟ ɮɚɦɢɥɢɸ, ɢɦɹ ɢ ɨɬɱɟɫɬɜɨ ɩɨɥɭɱɚɬɟɥɹ. ɀɟɥɚɬɟɥɶɧɨ ɭɤɚɡɚɬɶ ɞɨɩɨɥɧɢɬɟɥɶɧɨ ɫɜɨɣ ɬɟɥɟɮɨɧ ɢ ɚɞɪɟɫ ɷɥɟɤɬɪɨɧɧɨɣ ɩɨɱɬɵ. ɑɟɪɟɡ ɂɧɬɟɪɧɟɬ ɜɵ ɦɨɠɟɬɟ ɜ ɥɸɛɨɟ ɜɪɟɦɹ ɩɨɥɭɱɢɬɶ ɫɜɟɠɢɣ ɤɚɬɚɥɨɝ ɢɡɞɚɬɟɥɶɫɬɜɚ «ɋɈɅɈɇ-ɉɪɟɫɫ», ɫɱɢɬɚɜ ɟɝɨ ɫ ɚɞɪɟɫɚ http://www.solon-press.ru/katalog. ɂɧɬɟɪɧɟɬ-ɦɚɝɚɡɢɧ ɪɚɡɦɟɳɟɧ ɧɚ ɫɚɣɬɟ www.solon-press.ru. ɉɨ ɜɨɩɪɨɫɚɦ ɩɪɢɨɛɪɟɬɟɧɢɹ ɨɛɪɚɳɚɬɶɫɹ: ɈɈɈ «ɋɈɅɈɇ-ɉɪɟɫɫ» Ɍɟɥ: (495) 617-39-64, (495) 617-39-65 E-mail: kniga@solon-press.ru, www.solon-press.ru © Ʉɨɦɥɟɜ ɇ. ɘ., 2022 ISBN 978-5-91359-276-7 © «ɋɈɅɈɇ-ɉɪɟɫɫ», 2022
Посвящается естественно, Хорошим Людям Нас так мало осталось 3
Содержание Вступление .......................................................................................................7 Здравствуйте, коллеги!..............................................................................7 Человеческими словами - о чём эта книга?.............................................8 А о чём я здесь не буду говорить?............................................................9 А на каком языке мы будем программировать?....................................11 О шрифтах ................................................................................................13 О Приложении и приложениях...............................................................14 Почему я иногда повторяюсь?................................................................15 Что почитать?...........................................................................................16 Часть Первая. Теория ..................................................................................20 Глава 1 TP. Простая программа. И как будто ничего нового ..............20 Преамбула.................................................................................................20 Повторение пройденного. Светофор без затей .....................................20 Светофор причёсанный ...........................................................................24 Печальное будущее нашего светофора. Прогноз..................................26 Много, очень много, светофоров............................................................28 Глава 2 То же самое. Весело и с объектами .............................................41 Вступление и объяснения........................................................................41 Наконец, объектный светофор................................................................45 А теперь много объектных светофоров .................................................54 А теперь со всей этой фигнёй мы попытаемся взлететь ......................59 Глава 3 То же самое. Delphi. Глава очень короткая...............................61 Расширение кругозора. Вообще о классах в Delphi..............................65 Ещё раз, другими словами, о важном ....................................................67 Виноват, исправлюсь…...........................................................................69 Глава 4 Речь в данной главе пойдет только и исключительно о свойствах ........................................................................................................70 Просто свойства .......................................................................................70 Наконец, последняя, и правильная, светофорная программа ..............80 Не просто свойства, а индексированные ...............................................81 Дайте две! .................................................................................................90 Самый главный метод .............................................................................96 Всё-таки графика......................................................................................98 А дальше? ...............................................................................................101 Всякие дополнительные мелочи и детали ...........................................102 Глава 5 Теперь по научному. Инкапсуляция ........................................106 4
Глава 6 Понятная программа про наследование без терминов.........110 Простой класс, ничего нового ..............................................................110 Тот же класс, но кое-что новое.............................................................115 Глава 7 Теперь по научному. Наследование..........................................122 Общая теория. Длинная.........................................................................122 Нюансы. Повысить или понизить?.......................................................129 Серьёзные изменения в классе .............................................................132 А теперь о хорошем...............................................................................136 Глава 8 Практические занятия по наследованию. И по тестированию .....................................................................................139 Небольшой перерыв – открытые массивы...........................................139 Назад в ООП...........................................................................................143 Вперёд в ООП.........................................................................................148 Немного о тестах....................................................................................153 Возвращаемся от тестирования к программированию.......................160 ООП продолжается................................................................................163 А теперь о главном ................................................................................168 Развитие темы.........................................................................................173 Глава 9 Наследование очень коротко.....................................................175 Глава 10 Что-то с виртуальными методами..........................................178 Сначала о грустном................................................................................178 Любимый пример, с небольшими изменениями.................................179 Несколько новых слов...........................................................................186 Быстро чиним программу о словах ......................................................189 Немного глубже и подробнее ...............................................................190 Развитие темы.........................................................................................198 Глава 11 Теперь по научному. Полиморфизм.......................................201 Развитие темы.........................................................................................202 Глава 12 Вся теория вместе и коротенько. Раз и навсегда .................205 ООП с птичьего полёта .........................................................................205 Наследование..........................................................................................206 Полиморфизм .........................................................................................210 Глава 13 Коротко. Особенности ООП применительно к Delphi........212 О свойствах, неупомянутое...................................................................213 Экзотика..................................................................................................215 Глава 14 Эскиз очень сложной программы. Карты.............................216 Преамбула...............................................................................................216 Чего я хочу. Обоснование .....................................................................216 Как я это вижу, и кто у нас будет классом ..........................................219 Карта и колода. Начинаем программировать......................................224 5
Рекомендации по дальнейшему развитию сюжета.............................225 Глава 15 Эскиз программы. Пускай умрёт слабейший.......................227 О программировании, амёбах и Чарльзе Дарвине..............................227 Наш Мир. И наша Война.......................................................................228 Суровая программистская реальность.................................................231 Ободряющий финал...............................................................................235 Часть вторая. Практика ............................................................................236 Приложение A. Немного о карточных играх.........................................236 Постановление Министерства спорта и туризма Республики Беларусь от 14 мая 2003 г. №12 "Об утверждении Инструкции по игре в "Храп" .................................................................................................................236 Адаптация правил храпа к нашим условиям, моим вкусовым пристрастиям и удобству программирования.....................................240 Приложение B. Как настроить Delphi. Очень коротко.......................242 Project\Options… ....................................................................................242 Environment Options...............................................................................244 Editor Options..........................................................................................245 Debugger Options....................................................................................245 Ещё ..........................................................................................................245 И совсем напоследок .............................................................................246 Приложение C Как рисовать в TP. На одной странице. Нет, на двух ..................................................................................................247 Приложение D. Как рисовать в Delphi....................................................249 Цвет .........................................................................................................249 Рисуем.....................................................................................................250 Приложение E Простой объект для работы с клавиатурой через BIOS...............................................................................................................261 Приложение F Программа о словах. Полностью и даже лучше ........263 Комментарии, возможно, ненужные....................................................269 О файлах и потоках. Сравнительный анализ.......................................270 Приложение G Очень полезные процедуры, функции и классы ......277 Правильный TStringList.........................................................................277 Правильный TList ..................................................................................278 Очень правильный класс для сохранения и восстановления вообще283 Реализация правильного класса............................................................291 Хочется чего-то ещё ..............................................................................296 6
Вступление Здравствуйте, коллеги! Как-то раньше я написал книгу «Самоучитель игры на Паскале». Потом я написал книгу «Школа игры на Паскале». Сначала всё было просто – сначала Самоучитель, потом Школа. А что дальше я даже и не знаю. Короче говоря – эта книга о самом главном – об Объектно Ориентированном Программировании. Сокращённо ООП. Для любителей, ООП можно расшифровать и как Объектно Ориентированный Подход. Ещё встречается расшифровка Объектно Ориентированное Проектирование. Смысл-то всё равно один. Сначала этот раздел назывался совсем по-другому – «Здравствуйте, мои маленькие друзья!». Назывался он так дурашливо и бесцеремонно потому, что сначала я ориентировал книгу на студентов младших курсов соответствующих специальностей и даже на очень умных старшеклассников. Но, пока я книгу писал, я много общался с другими программистами. А также вспоминал те чудные времена, когда Объектное Программирование только появилось на нашем горизонте. И, к своему ужасу, я понял, что большинство программистов ООП не понимают. Причём, половина программистов не понимает ООП вообще, но понимает, что она (половина в смысле) его (ООП в смысле) не понимает. А из другой половины многие уверены что всё понимают, но в реальности понимают как-то странно… Эти, кстати, самые опасные, если с ними приходится работать вместе. Поэтому я подумал и решил слегка сменить ориентацию – на профессионалов, которые все-таки, наконец, захотели узнать, что же такое ООП и как оно работает и зачем это надо. Разумеется, студенты, и умные старшеклассники никуда не делись. Я вообще-то пишу очень просто, доступно и увлекательно. Понятно ведь – сам не похвалишь, никто не похвалит… И название у книги сначала было другим. Вначале эта книжка называлась «Объекты, классы и Винни-пух», что, разумеется, совсем другое дело… Потом я испугался. Не нарушаю ли этим авторских прав покойных А.Милна и Г.Заходера? Точнее, их покойных родственников. Точнее, наоборот. Ну, вы поняли. То есть я испугался, что чёрной– чёрной ночью на чёрных-чёрных вертолетах за мной прилетят 7
поборники авторских прав и впердолят. Извините, если слово «поборники» оказалось для вас незнакомым и грубым. Поборники – это такие не совсем хорошие люди, ну вы поняли, им бы лишь побороться, или побираться, они ведь такие поборники. Короче, название пришлось поменять. Разумеется, из-за этого пришлось поменять всю концепцию книги. Низабудунипрощу! Вы ничего не поняли? Хорошо, переходим ко второму разделу. Человеческими словами - о чём эта книга? Самокритично признаюсь – я человек немолодой и вообще скорее преклонных лет, чем юный. За свою жизнь я повидал немало нововведений, и, обычно, глядя на них, я приговаривал – «какая дурь!». И обычно оказывался прав. Знаете ли вы, что такое «тощие компьютеры»? Или язык программирования Жаба, которая заменит все дожабные языки программирования на свете? Или Интернет, который «всему научит сам»? Я даже не вспоминаю о системах команд RISC, SISC, PISC и о безжалостной между ними войне. А знаете ли вы, что такое Open Source? Нет, вы, скорее всего, знаете, что это такое. Но вы наверняка и представить не можете, как нам его пытались продать двадцать лет назад. Как сейчас помню, замечательную статью молодого журналиста, по забавной случайности из того же города, что и я. Он романтически сравнивал Open Source с долгожданной весной – вот придёт весна, растает снег, и из-под снега покажутся собачье дерьмо и окурки. Придётся понюхать, но потом мы всё это уберём, и настанет счастье. Меня эта концепция как-то сразу не увлекла. А теперь нам пытаются продать какие-то «облачные вычисления», или что-то другое «облачное». Был такой великий поэт Маяковский, написал поэму «Облако в штанах», потом понял, что полная ерунда получается, и застрелился, от большой любви, конечно. И с этими нынешними фантазёрами то же будет. И вот всё, о чем я говорил, тощие компьютеры, открытые тексты и даже не помню точно что, отправилось, извините, в задницу. И всё прочее, чего я не способен понять в течение минуты, отправится туда же. У меня страшное врождённое чутьё на мутные и сомнительные вещи. 8
Если я чего-то за минуту не смог понять, значит «в топку», как говорили в моей молодости в этом самом ФИДО. Извините, отвлёкся. Так вот, одна из тех немногих вещей, которые, я мало того, что понял сразу, но они ещё и оказались хоть к чему-то годными – Объектно Ориентированное Программирование, сокращённо, как уже не раз сказано, – ООП. Я его рекомендую, а моя рекомендация чего-то да стоит. Вот о нём, об ООП, в книге в основном речь и пойдёт. А о чём я здесь не буду говорить? Вопрос кажется странным. Естественно, количество предметов неупомянутых в этой книге в бесконечное количество раз превышает количество предметов, в этой книге упомянутых. Тем не менее, вопрос вполне нормален и уместен – любой автор должен чем-то себя ограничить, за счёт предметов, которые вроде бы принадлежат к тем, о которых поговорить можно, но вроде бы и ни к чему. Ни к чему, разумеется, исключительно по моему мнению. Так вот, я не буду говорить об этом. Я не буду говорить о том, как оно, ООП, устроено внутри. К примеру, вот так. Далее цитата из очень хорошей книги: «Когда компилятор компилирует правила объекта Point, он сначала встречает Point.Show и Point.Hide и компилирует код для обоих правил в сегмент кода. Немного позднее в файле он встречает правило Point.MoveTo, которое вызывает как правило, Point.Show, так и правило Point.Hide. Как и в случае с любым вызовом процедуры, компилятор замещает указатели исходного кода на Point.Show. и Point.Hide адресами их сгенерированного кода в сегменте кода». Вам это интересно? Лично мне – нет. Весь смысл Объектно Ориентированного Подхода к программированию и заключается в том, что нам абсолютно неинтересно, что там внутри, причём, неважно у кого внутри. Древняя английская мудрость гласит: «Если оно выглядит как утка, плавает как утка и крякает как утка, то это утка и есть». Да, я в курсе, что эта мудрость не древняя и не английская, но в отношении ООП она 9
заиграла новыми красками – ну кому какая разница, как оно устроено внутри, и как компилятор генерирует код. Крякает? Крякает. Значит, утка. Более того, в этой книге я ни разу не вспомню о святом: «Каждый тип объекта имеет в сегменте данных нечто, называющееся "Таблицей виртуальных правил" (VMT). Эта таблица содержит размер типа объекта, и, для каждого из его виртуальных правил, указатель на код, реализующий это правило. Конструктор же устанавливает связь между экземпляром, вызывающим этот конструктор, и Таблицей виртуальных правил (VMT) данного типа объекта. Важно помнить: для каждого типа объекта существует только одна таблица виртуальных правил. Отдельные экземпляры типа объекта (то есть переменные этого типа) содержат связь с VMT - они не содержат саму Таблицу виртуальных правил (VMT)». Я привёл эту длинную цитату из той же очень хорошей книги неслучайно. Кстати, все ссылки на источники цитирования далее аккуратно последуют. Я привёл эту цитату, потому что нет ни одной книги по ООП, в которой бы не упоминалась Таблица Виртуальных Методов. (Здесь, по прихоти переводчика-затейника, то, что обычно называется «метод», упорно именуется термином «правило», я не знаю почему). Так что я решил не отступать от всеобщего заговора писателей про ООП и тоже об этом вспомнил – первый и последний раз. Да и вы теперь всё об этом прочитали и знаете. Прочитали – забудьте. Нам это не понадобится. И, разумеется, немного далее я приведу список самых разных книг, которые советую вам прочитать. А вот здесь, на этом самом месте, я должен торжественно объявить, что есть и книги, которые читать не надо, что, по-своему, вполне логично. Чем хороша эпоха Интернета, так это тем, что можно посоветовать любую книгу, не заботясь о её годе выпуска. Только один пример, ничего личного. Орлик С. В. - Секреты Delphi на примерах, «Бином» 10