Главная страница
Навигация по странице:

  • Разделение большой программы на множество подпрограмм

  • 292 Часть

  • Глава 30. Так что же это такое

  • Инкапсуляция: разделение данных и команд

  • Коды для отображения окна Коды для сворачивания окна Коды для изменения файлаКоды для закрытия

  • отображения окна Коды для сворачивания окна для окна

  • Наследование повторно используемых кодов

  • Перегрузка существующих кодов

  • Глава 30. Так что же это такое — объектно-ориентированное... 295

  • Часть VII. Объектно-ориентированное программирование

  • 1. Создание файла классов. 2. Написание колов BASIC в файле классов. 3. Объявление в программе переменных, которые представляют собой файлы классов.

  • Глава

  • 1. Выберите команду Class класс). Откроется диалоговое окно Add New Item

  • 298 Часть VII. Объектно-ориентированное программирование

  • Visual Basic .NET для чайников - У. Вонг. Visual Basic .NET для чайников - У. Диалектикамосква СанктПетербург Киев


    Скачать 7.1 Mb.
    НазваниеДиалектикамосква СанктПетербург Киев
    АнкорVisual Basic .NET для чайников - У. Вонг.pdf
    Дата29.05.2018
    Размер7.1 Mb.
    Формат файлаpdf
    Имя файлаVisual Basic .NET для чайников - У. Вонг.pdf
    ТипКнига
    #19767
    КатегорияИнформатика. Вычислительная техника
    страница27 из 30
    1   ...   22   23   24   25   26   27   28   29   30
    Глава 30. Так
    же это такое — объектно-ориентированное... 291

    Еще более серьезные проблемы, связанные с отсутствием планирования при написании программ, случались из-за того, что программисты не могли удержать в своей голове множе- ство разрозненных деталей, теряли их след, забывали о них, и хотя программы работали, это было не совсем то или совсем не то, что задумывалось изначально. Поскольку разобраться в написанных кодах и правильно их откорректировать было практически невозможно, боль- шинство программистов просто начинали писать свои программы заново. Новые версии про- грамм, опять-таки, были далеки от совершенства, процесс повторялся снова и снова, и в ко- нечном результате некоторые программы так и не доводились до конца.
    Одним из первых методов, разработанным для решения подобных проблем, а также для усовершенствования процесса создания больших программ, был метод, названный струк-
    турным программированием. В основу этого метода положено три идеи:
    делить большую программу на множество маленьких подпрограмм;
    '•' объявлять переменные и типы принимаемых ими значений;
    ;
    использовать в маленьких программах только последовательные команды, коман-
    I ды ветвления и команды циклов.
    Разделение большой программы на множество подпрограмм
    Написать одну большую решающую сразу много задач, гораздо сложнее, чем написать несколько маленьких программ, каждая которых предназначена для решения все- го одной небольшой задачи. Поэтому, теоретически, можно написать много маленьких про- грамм, занимающихся решением разных проблем, а затем объединить их для создания одной большой программы, решающей сразу множество задач.
    Этот прием не только упрощает процесс написания больших программ, но и значительно облегчает процесс внесения в них изменений и поиска ошибок, поскольку теперь не нужно модифицировать программу в достаточно определить соответствующую подпро- грамму и работать только с ней.
    Visual Basic поддерживает такую практику, автоматически разделяя коды пользова- тельского интерфейса на отдельные процедуры обработки событий. Если же вы пишете коды
    BASIC для обработки данных и проведения вычислений, Visual Basic также позволяет вам создавать небольшие общие процедуры и сохранять их в отдельных файлах модулей (о чем рассказывалось в главе 27).
    Объявление переменных
    Изначально можно было создавать переменные в любом месте программы и присваивать им значения любых типов, благодаря чему разобраться, что делает программа, было практи- чески невозможно. Поэтому и было решено, что все переменные должны объявляться зара- нее. В этом случае другие программисты могли понять, для чего в программе используется та или иная переменная.
    Как средство борьбы с ошибками было принято еще одно решение: при объявлении пере- менных должен указываться тип данных, которые эти переменные могут содержать. Если вы попытаетесь присвоить переменной значение другого типа (не того, который был для нее объявлен), это сразу же будет воспринято как ошибка и выполнение программы прекратится.
    Этим способом предотвращается создание и распространение программ, неправильно сохра- няющих данные. А как известно, некорректные данные приводят к сбоям в работе компьюте- на которых они обрабатываются.
    Сделав обязательным объявление переменных и типов принимаемых ими значений, Visual
    Basic помогает вам создавать программы, понятные и простые для внесения в них из- менений. (Информацию об использовании переменных вы найдете в главе
    292 Часть
    Объектно-ориентированное программирование

    Использование последовательных команд, команд ветвления и команд циклов
    Самые большие проблемы в ранних программах возникали при использовании специаль- ной команды, обозначаемой словом GOTO. Эта команда, по сути, говорила компьютеру:
    "Перейди в конец программы и выполни эту инструкцию, затем перейди на начало програм- мы и выполни эту инструкцию, потом перейди к программы и сделай это, потом пе- рейди в начало, затем перейди туда-то и т.д."
    Из-за постоянных переходов из одного конца программы в другой практически невоз- можно было понять, что именно эта программа делает. Идея структурного программирования положила этому конец и ограничила перемещение по программе выполнением только трех видов команд: последовательных, ветвления и команд циклов.
    При выполнении последовательных команд выполняется одна инструкция, затем вторая и т.д.
    Если используется команда ветвления, компьютер выполняет один из возможных наборов инструкций. В Visual Basic эти команды представлены операторами и
    S e l e c t - C a s e (они рассматривались в главах 22, 23).
    Если выполняются команды циклов, компьютер несколько раз подряд повторяет один и тот же набор инструкций. Команды циклов, используемые в Visual Basic рассмотрены в главах 24, 25.
    Как видите, ни одна из команд не может осуществлять переходы из одного конца про- граммы в другой, а потому все последовательно выполняемые инструкции оказываются ком- пактно собранными в отдельных частях программы, что значительно облегчает их понимание и дальнейшую модификацию.
    Хотя разработка и внедрение идей структурного программирования знаменовали собой большой таг вперед, две крупные проблемы оставались нерешенными. Несмотря на то, что разные части программы становились изолированными друг от друга, каждая из них по- прежнему имела доступ к одним и тем же данным. Поэтому, если ошибка в одной части про- граммы приводила к нарушению целостности данных, она не могла быть изолирована и в се поисках приходилось просматривать коды всей программы.
    Более того, если нужно было изменить источник данных (например, какой-нибудь файл,
    где хранились данные, перемещался из одного каталога в другой), приходилось просматри- вать коды всей программы и вносить изменения во все команды,
    как-то ссылались на эти данные. Если хотя бы одна такая команда пропускалась, возникала ошибка.
    Вторая нерешенная проблема заключалась в том, что процесс написания небольших под- программ, как правило, занимал много времени.
    Чтобы ускорить его, многие программисты копировали части уже работающих программ и вставляли их в свои программы. Это было достаточно удобно, поскольку стоило только внести небольшие и фрагмент программы готов. Кроме того, если этот фраг- мент мог быть использован в других частях программы, он еще несколько раз.
    Теперь уже несложно было иметь по нескольку вариантов одной и той же подпрограммы в кодах своей программы.
    Но что если возникала необходимость внести в эту подпрограмму какие-то изменения?
    Приходилось опять-таки просматривать коды всей программы, находить эти скопированные фрагменты и изменять каждый из них по отдельности.
    Глава 30. Так что же это такое объектно-ориентированное... 293

    Для решения перечисленных проблем была разработана концепция объектно- ориентированного программирования (сокращенно ООП), объединяющая в себе принципы структурного программирования и некоторые новые идеи, которые не только позволяют бы- стрее и более простыми способами создавать надежные программы, но и значительно упро- щают процесс их отладки. Двумя основными нововведениями ООП являются принцип инкап- суляции и принцип наследования.
    Инкапсуляция: разделение данных и команд
    Как и структурное программирование, ООП рекомендует делить большие программы на несколько маленьких подпрограмм. Но в отличие от структурного программирования, просто разбивающего связанные между собой наборы команд на группы, объектно-ориентированное программирование изолирует как инструкции, так и обрабатываемые ими данные в отдель- ных подпрограммах. Чтобы лучше понять этот принцип, взгляните на рис. 30.1, демонстри- рующий различие между обычными программами и программами, написанными с использо- ванием приемов ООП.
    Обычная программа
    Коды для открытия файла
    Коды для отображения окна
    Коды для сворачивания окна
    Коды для изменения файла
    Коды для закрытия
    Коды для сохранения файла
    Команды набраны в произвольной последовательности, что усложняет их поиск и внесение изменений
    Объектно-ориентированная программа
    [Объект File]
    Коды для открытия файла
    Коды для изменения файла
    Коды для сохранения файла
    отображения окна
    Коды для сворачивания окна
    для
    окна
    <аждая команда относится к своему объекту, что значительно облегчает процесс отладки и модификации программы
    Рис.
    Коды объектно-ориентированных программ легче для понимания
    и дальнейшей модификации
    Выделяя команды и обрабатываемые ими данные в отдельный объект, вы изолируете разные части программы и не позволяете им вмешиваться в работу друг друга. Таким образом, большая программа создается не из множества подпрограмм, а из множества отдельных объектов.
    Наследование повторно используемых кодов
    В структурном программировании при повторном использовании какого-либо набора ко- дов таковой необходимо было физически скопировать и вставить в другое место программы.
    В объектно-ориентированном программировании этого делать не нужно. Достаточно создать новый объект на базе существующего.
    На самом деле новый объект не является обычной копией исходного объекта. Вместо того чтобы просто скопировать существующие коды, новый объект их наследует. Это означает,
    294
    Часть
    Объектно-ориентированное программирование
    что в новом объекте содержится ссылка на коды исходного объекта. Когда компьютер при- ступает к выполнению инструкций объекта, который наследует коды другого объекта, он по- лучает такую команду: "Коды BASIC, которые должны быть выполнены, содержатся в дру- гом объекте. Вот ссылка на эти коды, найди их и приступай к работе".
    Главным преимуществом метода наследования является тот факт, что повторно исполь- зуемые коды не нужно копировать. Теперь, если возникнет необходимость как-то их изме- нить, достаточно будет внести изменения только в исходный фрагмент, и не заниматься по- иском в программе всех остальных мест, где эти коды были использованы.
    Перегрузка существующих кодов
    Еще одним новшеством объектно-ориентированного программирования является воз- можность перегрузки. Она вытекает из принципа наследования кодов, при котором один объ- ект ссылается на коды другого объекта. Разумеется, почти всегда к новому объекту добавля- ются какие-то дополнительные коды, а значит, такой объект будет состоять из двух наборов кодов: из тех, которые были наследованы из другого объекта, и из собственных.
    Как бы там ни было, но объекты, которые наследуют коды друг друга,
    между со- бой и являются, по сути, разными версиями одной и той же подпрограммы. Возможность пе-
    регрузки позволяет присваивать одинаковые имена подпрограмме, которая содержит исход- ные коды, и подпрограмме, которая их наследует.
    В обычных условиях, если бы вы присвоили двум процедурам одинаковые имена, Visual
    Basic воспринял бы это как ошибку и отказался выполнять вашу программу. Но в случае создания объектно-ориентированной программы вы можете присваивать различным подпро- граммам, относящимся к разным объектам, одинаковые имена. Таким образом, отпадает не- обходимость присваивать "почти одинаковые" (различающиеся одной-двумя буквами) имена подпрограммам, которые, по сути, решают одни и те же задачи.
    Предположим, вы создали объект, отображающий на экране фигурку самолета. Одна из подпрограмм этого объекта, имеющая название Полет, отвечает за его перемещение по эк- рану. А еше вам нужно создать объект, отображающий на экране фигурку воздушного шара.
    Этот объект можно было бы создавать нуля", но намного проще будет наследовать коды из уже существующего объекта, отображающего на экране фигурку самолета.
    Конечно, путь преодолеваемый воздушным шаром, несколько отличается от траектории самолета, поэтому процедуры, отвечающие за их перемещение по экрану, будут немного раз- ными. Благодаря возможности перезагрузки процедуру, перемещающую по экрану фигурку воздушного шара, также можно назвать именем Полет. Теперь, если коды объекта, изобра- жающие на экране воздушный шар, вызывают процедуру Полет, запускается именно та про- цедура, которая принадлежит этому объекту (т.е. перемещающая воздушный шар). Если же процедуру Полет вызывает объект, изображающий на экране самолет, запускается именно та процедура, которая отвечает за перемещения самолета.
    Таким образом, если ваша программа вызывает процедуру Полет, компьютер в первую очередь уточняет, фигурку какого именно объекта нужно отправить в путешествие по экрану,
    и уже в зависимости от этого запускается та или иная версия процедуры Полет.
    Разрешая использовать одинаковые имена для подпрограмм, управляющих различными объектно-ориентированное программирование дает вам возможность присваивать одни и те же имена столько раз, сколько это необходимо.
    Объектно-ориентированное программирование упрощает процесс создания боль- ших программ благодаря тому, что не смешиваются данные, обрабатываемые раз- ными группами команд, а также благодаря повторному использованию кодов без их предварительного копирования.
    Глава 30. Так что же это такое — объектно-ориентированное... 295

    Тест на проверку полученных вами знаний
    Перечислите основные принципы структурно- го программирования.
    а. Не бойся (ошибок).
    Не верь {чужим программам).
    Не проси (повышения зарплаты).
    б. Разделение большой программы на не- сколько маленьких подпрограмм; объяв- ление переменных; использование только последовательных команд, команд ветвле- ния и команд в. Основной принцип таков: создайте свою структуру из нескольких программистов и они сами начнут писать для вас программы.
    эту главу.
    2. Какие новые возможности предоставляет объект- но-ориентированное программирование?
    а. Упрощает процесс отображения на экране са- молетиков, воздушных шаров и других лета- тельных аппаратов,
    б. Не программе совершать ошибки и менять свою ориентацию.
    в. Инкапсуляция команд и данных; наследование существующих кодов; перегрузка.
    г. Можно указать в своем резюме, что вы про- граммист со знанием ООП, и приступить к по- иску более престижной работы.
    Часть VII. Объектно-ориентированное программирование

    Глава 31
    Объектно-ориентированное
    программирование на практике
    объектно-ориентированного программирования
    Создание объектов в Visual Basic
    Использование объектов идея объектно-ориентированного программирования заключается в том, чтобы разделить программу на отдельные объекты, которые в дальнейшем будут взаимодей- ствовать друг с другом. Например, если вы создаете игру, смысл которой в том, чтобы бегать по лабирингу и убивать всяких монстров, вам нужно создать две группы объектов, представ- ляющих боевой арсенал и всех участвующих в резне персонажей.
    Каждый из "оружейных" объектов будет представлять какой-то один вид оружия, кото- может быть использован игроками или монстрами (другими словами, все, что стреляет),
    а каждый из объектов второй группы будет представлять одного из игроков или одного из монстров (другими словами, все, что бегает).
    Объектно-ориентированное программирование призвано облегчить процесс созда- модификации больших программ. Но само но себе оно не является гарантией быстрого создания эффективно работающих программных продуктов. Плохой про- использующий ООП, по-прежнему будет писать более слабые програм- мы, чем хороший который преимуществами ООП не пользуется.
    использование
    Visual
    Теперь, когда вы имеете общее представление об объектах, пришло время узнать, как они создаются и применяются в Visual Basic
    Процесс создания объектов в Visual Basic можно разделить на три этапа:
    1. Создание файла классов.
    2. Написание колов BASIC в файле классов.
    3. Объявление в программе переменных, которые представляют собой файлы
    классов.
    Если переменная представляет файл классов является как бы одним из типов данных, таким как или S t r i n g ) , она называется

    взятым из концепции объектно-ориентированного программирования.
    Файл классов является, по сути, шаблоном, который определяет, как должны вес- ти себя объекты. После создания файла классов вам еще нужно объявить пере- менную — чтобы создать таким образом сам объект.
    Глава
    программирование на практике 297

    Создание файла классов
    Файл классов определяет характеристики и поведение отдельного объекта. Чтобы создать файл классов, выполните такие действия.
    1. Выберите команду
    Class
    класс).
    Откроется диалоговое окно Add New Item (Создать новый элемент).
    2. Щелкните на значке Class, а затем — в поле Name.
    3. Укажите имя создаваемого файла.
    В конце имени указывать расширение . VB необязательно — Visual Basic сделает это автоматически.
    4. Щелкните на кнопке Open.
    Название только что созданного файла появится в окне Solution Explorer (если оно отображено на экране), а в окне кодов отобразятся коды пустого класса, ко- торые будут выглядеть так, как показано ниже (вместо слова C l a s s l будет ука- зано имя, данное этому файлу на третьем шаге):
    Public Class Classl
    End Class
    Файл, не содержащий кодов, никакой ценности не представляет. Теперь вам предстоит набрать коды BASIC между строками
    Class C l a s s l End Class.
    Определение объекта
    После того как файл классов будет создан, приступайте к написанию кодов BASIC, опре- деляющих, что из себя представляет новый объект. Обычно такие коды (они также называют- ся модулем класса) состоят из трех частей:
    | объявление переменных;
    объявление свойств (данных);
    методы, являющиеся процедурами BASIC (описаны в главе 27), которые манипу- лируют переменными и свойствами.
    Public Class Classl
    Объявление переменных ' Объявление свойств ' Методы
    End Class
    Каждый объект инкапсулирует (отделяет) свои данные (свойства) от остальной части про- граммы. Эти данные могут быть изменены лишь командами (методами), сохраненными в том же файле классов. Таким образом, другие команды программы никогда непосредственно не обращаются к данным, принадлежащим какому-то объекту. Различие между тем, как осуще- ствляется доступ к данным в обычной и в объектно-ориентированной программах, показано на рис. 31.1.
    298 Часть VII. Объектно-ориентированное программирование

    Команды для управления данными
    Данные
    Команды для управления данными
    Данные изолированы в пределах объекта
    Команды для управления данными
    В обычной программе доступ к данным ничем не ограничен
    Рис. 31.1. В объектно-ориентированной программе данные изолиру-
    ются путем внедрения их в объект
    Если возникает необходимость изменить способ обработки каких-либо данных, просмат- ривать всю программу уже не нужно — достаточно изменить коды только одного объекта.
    Таким образом, объектно-ориентированное программирование помогает изолировать коман- ды, которые имеют доступ к определенным данным, что значительно снижает вероятность возникновения ошибок при внесении изменений в коды программы.
    Само по себе использование объектов не является единственно верным способом написания программы, но чем больше вы их создадите, тем понятнее станет ваша программа и тем проще будет в дальнейшем вносить в нее изменения.
    Объявление переменных
    Объявление переменных в начале модуля класса является хорошей практикой (к тому же обязательной), поскольку позволяет в любой момент видеть, какие данные этим классом ис- пользуются. Если нужно объявить переменную, доступ к которой могут получить команды только этого класса, объявите ее как локальную переменную:
    P r i v a t e Число As I n t e g e r
    Переменные очень часто используются для временного хранения значений свойств объектов, о чем речь пойдет в следующем разделе данной главы.
    Хотя делать это нежелательно, но переменную можно объявить и как глобальную, доступ к значениям которой могут получить любые команды вашей программы. Чтобы объявить глобальную переменную, замените слово P r i v a t e ключевым словом P u b l i c :
    P u b l i c Число As I n t e g e r
    Если переменная будет объявлена как глобальная, любая часть программы (включая другие объекты) будет иметь возможность изменять хранимые ею данные. Следова- тельно, вероятность возникновения ошибок значительно возрастет. Поэтому не объ- являйте глобальные переменные, если на это нет действительно веских причин.
    1   ...   22   23   24   25   26   27   28   29   30


    написать администратору сайта