
- •Тема 5.3. Средства объектно-ориентированного программирования в vb
- •5.3.1. Две роли классов в ооп и типы данных в vb
- •5.3.2. Средства создания классов в vb
- •5.3.2.1. Средства создания пользовательских классов
- •5.3.2.2. Пошаговое руководство для создания приложения с классами
- •Определение класса
- •Создание кнопки для тестирования класса
- •Запуск приложения
- •5.3.3. Взаимодействие, взаимное различие и сходство форм, модулей и классов
- •5.3.4. Создание объектной модели и приложений с использованием классов
- •5.3.5. Иерархия классов и наследование
- •Наследование и тождественность
- •Базовые классы и повторное использование кода
- •Взаимозаменяемые производные классы
- •Неполные иерархии классов
- •Глобальные изменения производных классов через базовый класс
- •Изменение структуры базовых классов после развертывания
- •Проблема уязвимости базовых классов
- •Сведение к минимуму проблем уязвимости базовых классов
- •5.3.6. Задачи для самостоятельного решения по теме «Средства объектно-ориентированного программирования в Visual Basic»
- •Практикум
- •5.3.7. Тестовые задания по теме «Средства объектно-ориентированного программирования в vb»
- •Тема 5.3. Средства объектно-ориентированного программирования в Visual Basic Страница 85
Сведение к минимуму проблем уязвимости базовых классов
Наилучший способ избежать проблем уязвимости базовых классов – вносить изменения только в производные классы. Однако это не всегда возможно, поскольку при этом разработчику требуется просчитать все возможности при первом выпуске базового класса; несмотря на это, непредвиденные изменения базового класса иногда неизбежны.
Использование классов MustInherit и методов MustOverride помогает снизить вероятность появления проблем уязвимости базовых классов, поскольку при этом данные о реализации перемещаются к производным классам, и уменьшается необходимость изменения базового класса. Это опять же не всегда возможно даже при отличном планировании.
Переобъявленные члены данных в производных классах также очень полезны, поскольку уменьшают вероятность появления конфликтов именования с членами базового класса.
Наиболее безопасным способом расширения функциональности базового класса является добавление новых членов. Новые члены могут повредить базовый класс только в том случае, если в производном классе используется ключевое слово Overloads для наследования методов из базового класса и введения новых методов с тем же именем. Этой проблемы можно избежать путем явного указания в производном классе методов базового класса, которые необходимо унаследовать из базы путем переопределения этих методов и делегирования.
В известном смысле все базовые классы до некоторой степени непрочны. В конечном счете, проблемы уязвимости базовых классов избежать невозможно, но можно свести ее к минимуму путем точной разработки иерархий классов, снижающей необходимость внесения изменений в базовый класс, и при помощи доскональной проверки, если такие изменения неизбежны.
5.3.6. Задачи для самостоятельного решения по теме «Средства объектно-ориентированного программирования в Visual Basic»
В n разных школах г. Москвы (номера школ известны) проведен анонимный опрос m школьников 6 классов (числа n и m известны). Школьникам задавался вопрос, курят ли они. В опросе участвовали как мальчики, так и девочки. Результаты опроса поступали неупорядоченными по школам. Определить школы с максимальным процентом курящих отдельно по мальчикам и девочкам. Предусмотреть проверку правильности ввода информации.
Известны фамилии n сотрудников больницы (n - заданное число). Сотрудники работают по индивидуальному графику (1-й день - утро, 2-й день - вечер, 3-й день - выходной). В первое число месяца известно, в какую смену работает каждый сотрудник или имеет выходной. Составить алгоритм и программу, которые позволяют на любое заданное число месяца напечатать пронумерованный список сотрудников, имеющих выходной. Считать, что в месяце 30 дней.
Известны названия m предприятий города, производящие по n наименований различных изделий, для которых известны количества их выпуска в год. Составить алгоритм и программу, которые по наименованию изделия определяют название предприятия, производящего максимальное количество этого изделия, а также печатают список предприятий, на которых это изделие производится, располагая названия этих предприятий в порядке убывания объема выпуска данного изделия.
Список n рабочих цеха (n – заданное число) содержит следующие сведения о каждом: фамилия, числовой номер бригады, зарплата. Список не имеет определенной упорядоченности. Составить алгоритм и программу, которые выводят на экран списки рабочих по бригадам, располагая фамилии в порядке убывания зарплаты, и, кроме того, определяют и печатают значения средних зарплат по бригадам.
Пароходство владеет n пассажирскими теплоходами (n и названия теплоходов заданы), каждый из которых имеет каюты люкс на 1 и 2 палубах, первого класса на 2 и 3 палубах, второго класса на 3 и 4 палубах и третьего класса на 3 и 4 палубах. На каждом из теплоходов каюта может быть занята, забронирована или свободна. Составить алгоритм и программу для вывода по указанному пользователем теплоходу отдельно информации о количестве свободных кают и отдельно информации о количестве забронированных кают. Информацию выдать по каждой из палуб в порядке возрастания их номеров с указанием класса кают.
В течение месяца (30 дней) абоненты международной телефонной сети производили переговоры с m странами. Каждая страна имеет свой код и тариф за 1 мин. Составить алгоритм и программу, которые печатают счета абонентам, в которых указывается телефон абонента, код страны, количество минут, стоимость каждого разговора и итог за месяц. В общем списке абоненты представлены телефонными номерами, а для каждого разговора известна его продолжительность.
В чемпионате по футболу приняло участие n команд (названия команд известны). Составить алгоритм и программу, которые определяют 4 команды, показавшие лучшие результаты, если известен счет каждого матча. При равных условиях лучшей считается команда, у которой разность между забитыми и пропущенными мячами лучше.
В течение года (12 месяцев) отслеживалось изменение курсов n валют. Известны названия валют и их курс по отношению к рублю на последнее число каждого месяца. Составить алгоритм и программу, которые за каждый квартал определяют валюты, у которых наблюдался наибольший и наименьший рост относительно среднего квартального курса данной валюты.
Имеются сведения о доходах пяти магазинов по дням в течение одного месяца (в месяце 30 дней). Составить алгоритм и программу, которые для каждого магазина определяют числа месяца и соответствующие им дни недели с минимальным доходом, учитывая, что по субботам и воскресеньям магазины закрыты, а первое число месяца - вторник.
В отделе кадров предприятия имеется список сведений о n сотрудниках. О каждом сотруднике известно: фамилия (в списке фамилии расположены по алфавиту), номер отдела, должность, оклад и стаж работы. Составить алгоритм и программу, которые выводят списки фамилий сотрудников по отделам с указанием занимаемой должности, оклада и стажа.
Каждый из 5пяти цехов завода составляет ежемесячную заявку на приобретение по M разных комплектующих деталей. В заявке указаны: наименование детали, требуемое количество и завод-изготовитель (поставщик). Составить алгоритм и программу, которые выводят сводные списки заказов деталей для рассылки по поставщикам, в которых указаны наименования деталей с указанием общего количества требуемых деталей.
В бюро по трудоустройству имеются сведения о N вакансиях на предприятиях города. О каждом вакантном месте известно: название предприятия, должность, оклад, требуемое образование (высшее или среднее), предельный возраст. Составить алгоритм и программу, которые по данным об образовании и возрасте печатают список вакансий, располагая их в порядке убывания окладов.
В префектуре имеются сведения о потребностях в улучшении жилищных условий 1500 семей. О каждой семье известно, на квартиру из скольких комнат она претендует. Составить алгоритм и программу, которые печатают список семей, получивших квартиры в новом доме, и список семей, оставшихся в очереди, если известно, что в доме 100 квартир, из которых 30 однокомнатных, 40 – двухкомнатных и 30 – трехкомнатных.
Имеются сведения об урожаях зерна в n регионах России за m лет. Составить алгоритм и программу, которые определяют самый урожайный и самый неурожайный годы и для каждого года печатают список регионов в порядке убывания полученного в них урожая.
Список участниц конкурса красоты содержит 12 фамилий. Каждый из 200 опрошенных называет трех претенденток, и определяет каждой из них одно из первых 3-х мест. Вывести на экран фамилию участницы, набравшей наибольшее число первых мест. Если таких участниц несколько, то вывести фамилии всех участниц.
В типографии заказано n визитных карточек. Составить алгоритм и программу, которые определяют стоимость заказа, если первые 100 визиток стоят 5 руб. за штуку, а стоимость каждой последующей карточки уменьшается соответственно на 1 коп.
Список участниц конкурса красоты содержит 12 фамилий. Каждый из 200 опрошенных называет трех претенденток и определяет каждой из них одно из первых 3-х мест. Вывести на экран фамилию участницы, набравшей наибольшее число первых мест. Если таких участниц несколько, то вывести фамилии всех участниц.
Для каждого из 20 классов школы известно, сколько в них мальчиков и сколько девочек. Составить алгоритм и программу, которые выводят номера классов по убыванию процентного состава мальчиков и определяют процент девочек и мальчиков по школе в целом.
В доме проводится остекление окон. Количество квартир в доме и количество комнат в каждой квартире (1, 2 или 3) известно. Составить схему алгоритма и программу, которые определяют, сколько м2 стекла надо закупить и общую стоимость стекла, если в трехкомнатной квартире площадь окон составляет 10 м2, в двухкомнатной – 7 м2, в однокомнатной – 5 м2, а стоимость 1 м2 стекла 200 руб.
Составить алгоритм и программу, которые выводят список фамилий школьников по убыванию их среднего балла за год, а также определяют процент отличников (все отметки 5) и процент хорошистов (отметки 5 и 4), если для каждого из 25 школьников известны итоговые оценки по 15 предметам.
Объем файла, подлежащего архивации, составляет S мегабайт. При архивации объем файла уменьшается: программой ZIP – на 30%, а программой ARJ – на 25%, после чего архив разбивается на дискеты по 1,44 мегабайт. Составить алгоритм и программу, определяющую необходимое количество дискет для архивации файла заданного объема в зависимости от типа выбранной программы архивации (тип программы архивации вводится).
Известны сведения о багаже авиапассажиров одного рейса (багаж характеризуется фамилией пассажира, количеством вещей и общим весом). Составить алгоритм и программу, которые определяют средний вес багажа авиапассажира (в самолете занято n мест, но не все пассажиры имеют багаж), подсчитывают число пассажиров, у которых отсутствует багаж, и число пассажиров, у которых вес багажа превосходит средний вес, а также напечатают список фамилий пассажиров, у которых вес багажа превысил норму – S кг.
Имеется n партий микросхем одного вида. Из каждой партии отобрали m микросхем и раздали для контроля работникам отдела в произвольном порядке, которые определяли ее годность или негодность. Для того чтобы вся партия была забракована, достаточно, чтобы из m выбранных микросхем были забракованы k. Составить алгоритм и программу, которые по итогам контроля определяют количество негодных микросхем в каждой партии и количество забракованных партий.
Каждое из n швейных предприятий области специализируется на выпуске традиционных для данного предприятия m видах швейной продукции. Составить алгоритм и программу, позволяющие для каждого вида продукции определить предприятия (их номера), выпускающие данный вид продукции.
Для обслуживания международной конференции необходимо отобрать бригаду переводчиков, обладающих навыками синхронного перевода. В оргкомитет поступили предложения от М переводчиков, каждый из которых владеет двумя языками. Составить алгоритм и программу, которые производят отбор переводчиков, руководствуясь минимизацией расходуемых средств, если в бригаде обязательно должны быть по два переводчика с каждого из пяти заявленных на конференцию языков.
Ежедневно частное предприятие по быстрой доставке почты имеет n заказов, каждый заказ характеризовался стоимостью Ti и директивным сроком доставки Li. За превышения директивного срока предприятие выплачивало из стоимости заказа штраф, размеры которого линейно пропорциональны (с коэффициентом b) количеству просроченных часов. Досрочное выполнение заказа поощрялось премией в размере а% от стоимости заказа. Составить алгоритм и программу расчета дохода, полученного предприятием за месяц, если известны реальные сроки выполнения каждого из n заказов в каждый из 30 дней месяца.
Агент 007, отправляясь на задание, формирует багаж необходимых спецсредств, каждое их которых характеризуется определенной убойной силой и объемом. В целях конспирации объем дипломатического багажа ограничен. Составить алгоритм и программу, которые помогут сформировать багаж агента, т.е. производят выбор из М вариантов каждого средства то средство, которое обладает максимальной убойной силой, при этом учитывают, что суммарный объем всех выбранных средств не должен превышать заданный (S).
При производстве радиоприемника используется n наименований элементов. На складе имеется по M элементов каждого типа, каждый из которых характеризуется эффективностью, стоимостью и весом. Составить алгоритм и программу, которые позволяют выбрать самую эффективную элементную базу, вычислив при этом стоимость и вес составляющих ее элементов.
При расчете Единого социального налога (ЕСН) придерживаются следующей схемы: если сумма дохода нарастающим итогом за расчетный период не превышает N руб., то на эту сумму начисляют k1% налога, если превышает, то на сумму N руб. начисляют k1% налога, а на сумму превышения начисляют k2% налога(k1>k2). Составить алгоритм и программу, которые производят начисления ЕСН за год для l сотрудников предприятия, если имеются списки сотрудников с указанием сумм доходов по месяцам года, и печатают фамилии тех сотрудников, на доходы которых сумма налога превысила S руб.
В театральную кассу поступило n заявок (n задано) от школ города. Каждая заявка содержит название одного спектакля и необходимое количество билетов. Составить алгоритм и программу, которые на основании этих данных определяют популярность каждого спектакля и печатают их названия в порядке убывания количества заказанных на них билетов.
Кондитерская фабрика получила заказ на изготовление l тортов. Каждый торт изготавливается из n ингредиентов. На складе имеется по m видов каждого ингредиента, которые характеризуются сортом и ценой. Составить алгоритм и программу, которые определяют общую стоимость заказа, если для его выполнения были выбраны самые дорогие ингредиенты, и печатают список выбранных ингредиентов с указанием сорта и цены, обозначив ингредиенты номерами. Стоимость изготовления одного торта S руб.
Фирма по ремонту квартир получила n заказов, каждый их которых характеризуется стоимостью Ti и сроком его выполнения Li. За превышение срока выполнения стоимость заказа уменьшается на величину, пропорциональную количеству просроченных дней, а досрочное выполнение заказа поощряется премией в размере а% от стоимости заказа. Составить алгоритм и программу, которые определяют сумму, полученную фирмой за выполнение всех n заказов, если реальные сроки их выполнения известны.
При установленном счетчике расхода воды тариф составляет 35 коп. за один литр. При отсутствии счетчика, плата за воду в месяц для одной семьи составляет 150 руб. Составить алгоритм и программу, которые по известным данным о ежедневном потреблении воды (в литрах) одной семьей за 30 дней месяца, определяют, что выгоднее – оплата по счетчику или без счетчика, а также среднесуточный расход воды.
Для каждого из n студентов (фамилии известны) в архиве хранятся сведения о 60 оценках, полученных им за все время обучения в институте. Составить алгоритм и программу, определяющие, имеет ли студент право получить «красный диплом», если на «красный диплом» нельзя иметь ни одной тройки, а четверок – не более 10%. Вывести на экран список фамилий студентов с указанием его средней оценки, а также список студентов, которые имеют право получить «красный диплом».
Кабельный завод выпускает N видов кабелей. Каждый вид кабеля характеризуется маркой и стоимостью его метра. К заводу обратилось M заказчиков на поставку определенного количества каждого вида кабеля. Составить алгоритм и программу, которые для каждой марки кабеля определяют общее количество заказа, а также печатают список предприятий-заказчиков с указанием суммы договора, располагая названия предприятий в порядке убывания суммы договора.
При медицинском обследовании у N учащихся СПТУ был взят анализ крови на сахар. О каждом ученике известно: фамилия, группа и результат анализа. Составить алгоритм и программу, которые печатают по группам списки учащихся с их результатами анализа, а также отдельный список учащихся, у которых уровень сахара в крови превышает норму, расположив фамилии в списке в порядке убывания результата анализа, считая, что допустимая норма уровня сахара в крови заданная величина.
Создать DLL с классом Point, описывающим точку на плоскости, заданную декартовыми и полярными координатами. Среди методов класса Point предусмотреть метод Distance, вычисляющий расстояние до заданной точки. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с классом Point.
Создать DLL с классами Point и Line, описывающими точку и линию на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Line предусмотреть метод, определяющий принадлежность заданной точки линии.
Создать DLL с классами Point и Square, описывающими точку и квадрат на плоскости со сторонами, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Square предусмотреть метод, определяющий принадлежность заданной точки квадрату.
Создать DLL с классами Point и Circle, описывающими точку и круг на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Circle предусмотреть метод, определяющий принадлежность заданной точки кругу.
Создать DLL с классами Point и Rectangle, описывающими точку и прямоугольник на плоскости со сторонами, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Rectangle предусмотреть метод, определяющий принадлежность заданной точки прямоугольнику.
Создать DLL с классами Point и Rhomb, описывающими точку и ромб на плоскости с осями, параллельными осям координат. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Rhomb предусмотреть метод, определяющий принадлежность заданной точки ромбу.
Создать DLL с классами Point и Tetragon, описывающими точку и четырехугольник на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Tetragon предусмотреть метод, определяющий принадлежность заданной точки четырехугольнику.
Создать DLL с классами Point и Triangle, описывающими точку и треугольник на плоскости. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL. Среди методов класса Triangle предусмотреть метод, определяющий принадлежность заданной точки треугольнику.
Создать DLL с классами Account и Accounts, описывающими счет в банке и множество счетов клиентов, хранящихся в файле. Построить Windows-проект, предоставляющий пользователю интерфейс для работы с DLL.