Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет79/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   73   74   75   76   77   78   79   80   81
Байланысты:
А.А. Тюгашев
А.А. Тюгашев, А.А. Тюгашев, А.А. Тюгашев
геометрическая  фигура  и  унаследованных  классов  линия  и 
прямоугольник.  Определение  базового  класса  геометрических  фигур 
может выглядеть следующим образом: 
/* геометрическая фигура,атрибуты:координаты на плоскости и цвет */ 
class Fig 



154 
 
   public: 
     void SetXY(int nx, int ny) // 
задание координат 
       { 
 
    x=nx; 
 
    y=ny; 
       }      
       void Pokras(int cvet)  
       { 
 
    color=cvet; 
       }   
      
       void Skryt
(); // скрыть — нарисовать черным  
 
  { 
 
     Pokras(BLACK); 
 
     Risui(); 
 
  } 
 
  virtual int Risui()=0; 
   
 
   private: 
 
  int x, y; 
 
  int color; 
}; 
Обратите  внимание  на  следующее  обстоятельство.  Непосредственный 
доступ  к  координатам  x,  y  и  цвету  фигуры  закрыт  (модификатор 
private
).  Публичными  объявлены  функция  SetXY,  при  использовании 
которой  возможна  модификация  координат,  и  функция  Pokras  для 
изменения цвета фигуры. Данный подход широко применяется в объектно-
ориентированных программах. Еще один весьма важный момент связан с 
объявлением функции Risui, предназначенной для отображения фигуры 
на экране. Она не только объявлена как виртуальная — фигурирует запись 
=0
,  довольно  оригинальная.  Подобный  необычный  синтаксис  в  языке 
программирования  С++  предназначен  для  объявления  так  называемых 
чистых виртуальных функций — функций, не подлежащих определению в 
базовом  классе.  Действительно,  мы  не  можем  изобразить  фигуру 
вообще —  не  конкретно  прямоугольник,  треугольник  или  окружность,  а 
геометрическую  фигуру.  Конкретный  вариант  функции  Risui 
определяется в наследуемых классах: 
// класс линия 
class Linia: public Fig 

 
public: 


155 
 
 
 
void Risui(); 
 
 

 
 
 
setcolor(color); 
 
 
 
line(x,y,xk,yk); 
 
 

 
// 
конструктор  
 
     Linia (int ix,int iy, int ixk,int iyk) 
 
     { 
 
 
  x=ix;y=iy;xk=ixk;yk=iyk; 
          } 
     private: 
 
     int: xk,yk;  // 
координаты конца линии 
}; 
 
// 
класс прямоугольник 
class Priam: public Fig 

 
public: 
 
 
void Risui(); 
 
 

 
 
 
setcolor(color); 
 
 
 
rectungle(x,y,xk,yk); 
 
 

 
              
          // 
конструктор 
          Priam (int ix,int iy, int ish,int iv) 
 
     { 
 
 
     x=ix;y=iy;shir=ish;vys=iv;  
          } 
    private: 
 
 
int: shir,vys;  // 
ширина, высота 
}; 
Класс,  содержащий  хотя  бы  одну  чистую  виртуальную  функцию, 
называется  абстрактным  классом.  Создать  объект  абстрактного  класса 
нельзя. Такой класс используется лишь как часть иерархии наследования 
классов. 
Контрольные вопросы 
1. 
Применим  ли  объектно-ориентированный  подход  за  рамками 
программирования? 


156 
 
2. 
Можете  ли  вы  назвать  функциональные  языки  программирования, 
поддерживающие ООП? 
3. 
Метод и функция-член в ООП — одно и то же? Атрибут и переменная-
член? Подкласс и наследуемый класс? Чем определяется применяемая 
терминология? 
4. 
В чем заключается концепция абстрактного типа данных? 
5. 
Что такое полиморфизм? Приведите примеры. 
6. 
Опишите  концепцию  наследования  в  ООП.  Какова  связь  между 
наследованием и повторным использованием? 
7. 
В  чем,  по  вашему  мнению,  заключаются  недостатки  и  преимущества 
множественного наследования? 
8. 
Что такое дружественная функция? 
9. 
Зачем используется переопределение функций? 
10. 
Какой из языков ООП появился первым и когда? С какими целями он 
создавался и родственен ли Алголу? 
11. 
Является  ли  Smalltalk  языком  чистого  объектно-ориентированного 
программирования с наиболее полным воплощением концепции ООП? 
Кем и с какими целями был создан язык Smalltalk? 
12. 
Что  такое  модификатор  доступа?  Какие  модификаторы  вам  известны? 
Если  в  программе  на  C++  не  указать  модификатор  доступа,  какими 
будут члены класса по умолчанию — закрытыми или открытыми? 
13. 
Является ли концепция инкапсуляции уникальной для ООП? 
14. 
Что такое деструктор? Когда он вызывается? 
15. 
Что  такое  конструктор?  Может  ли  у  класса  быть  несколько 
конструкторов? 
16. 
У  каждого  ли  класса  существует  конструктор?  Что  такое  конструктор 
по умолчанию? 
17. 
Что  такое  виртуальная  функция?  Может  ли  она  быть  вызвана  на 
выполнение? 
18. 
Что такое чистая виртуальная функция и абстрактный класс? 
19. 
Поясните  принцип  действия  модификатора  доступа  protected.  Что 
такое защищенные члены класса? 
20. 
Возможен  ли  доступ  к  членам  класса  через  указатели?  Приведите 
примеры. 


157 
 
Достоинства и недостатки ООП 
Как  уже  говорилось,  в  настоящее  время  объектно-ориентированное 
программирование  является  магистральным  путем  развития  в  индустрии 
информационных  технологий.  Апологеты  ООП  говорят  прежде  всего  о 
следующих достоинствах объектно-ориентированных систем: 
 
возможности повторного использования; 
 
упрощении  создания  сложных  систем  за  счет  использования 
абстракции; 
 
удобстве  сопровождения  и  модификации  объектно-ориентированных 
программ. 
В то же время у ООП есть и ряд довольно авторитетных критиков. К ним, в 
частности, относится такой известный в мире программирования человек, 
как  Никлаус  Вирт,  создатель  языков  Паскаль,  Модула  и  Оберон.  Он 
утверждает, в частности, что ООП — не более чем тривиальная надстройка 
над  структурным  программированием  и  преувеличение  его  значимости, 
выражающееся в том числе во включении в языки программирования все 
новых  модных  «объектно-ориентированных»  средств,  безусловно,  вредит 
качеству  разрабатываемого  программного  обеспечения.  Н. Вирт  очень 
удивлен  тем  вниманием,  которое  уделяется  ныне  ООП.  Другой  критик 
ООП —  известный  специалист  по  программированию  Александр 
Степанов,  который  участвовал  в  создании  C++  вместе  c  Бьерном 
Страуструпом, а впоследствии написал стандартную библиотеку шаблонов 
языка  программирования  С++  (STL).  А. Степанов  полностью 
разочаровался  в  парадигме  ООП.  Он  пишет:  «Я  уверен,  что  ООП 
методологически  неверна.  Она  начинает  с  построения  классов.  Это  как 
если бы математики начинали бы с аксиом. Но реально никто не начинает 
с  аксиом,  все  начинают  с  доказательств.  Только  когда  найден  набор 
подходящих доказательств, лишь тогда на этой основе выводится аксиома. 
То есть  в  математике  вы  заканчиваете  аксиомой.  То  же  самое  и  с 
программированием: сначала вы должны начинать развивать алгоритмы, и 
только  в  конце  этой  работы  приходите  к  тому,  что  вы  в  состоянии 
сформулировать  четкие  и  непротиворечивые  интерфейсы.  Именно  из-за 
этой неразберихи в ООП так популярен рефакторинг — из-за ущербности 
парадигмы  вы  просто  обречены  на  переписывание  программы  уже  в  тот 
самый момент, когда только задумали ее спроектировать в ООП-стиле». 
Патриарх  свободно  распространяемого  ПО  Ричард  Столлмэн  также 
известен  своим  критическим  отношением  к  ООП.  Особенно  любит  он 
шутить  насчет  мифа  о  том,  что  ООП  «ускоряет  разработку  программ»: 
«Как  только  ты  сказал  слово  “объект”,  можешь  сразу  забыть  о 


158 
 
модульности». 
Критики, в частности, обращают внимание на следующие обстоятельства: 
 
Внедрение  ООП  требует  дополнительных  затрат  на  обучение 
программистов и накладных расходов при создании программ — от 12 
до 75 % времени. 
 
Наследование —  самая  большая  провокация  в  индустрии,  ни  в  каком 
моделировании наследования не существует. 
 
Инкапсуляция  и  повторное  использование  возможны  и  без  ООП  при 
правильной модульной организации программной системы. 
В  то  же  время  ряд  наиболее  сложных  и  успешно  используемых 
программных  систем  созданы  именно  в  рамках  объектно-
ориентированного подхода, его применяют такие гиганты индустрии, как 
Microsoft, IBM, Oracle. 
Оставляем за читателем право самостоятельно сделать выводы о пользе и 
недостатках объектно-ориентированного подхода к программированию. 
Контрольные вопросы 
1. 
В  чем  заключаются  плюсы  объектно-ориентированных  программных 
систем? 
2. 
Можно  ли  сказать,  что  объектно-ориентированный  подход —  пустое 
усложнение, не несущее выгод? Обоснуйте свое мнение. 


159 
 
Список литературы 
1. 
Современный  компьютер:  Сб.  науч.-попул.  Статей;  Пер.  с  англ./Под 
ред. В.М.Курочкина; предисл. Л.Н. Королева  — М: Мир, 1986. 
2. 
Хофштадтер  Д.  Гедель,  Эшер,  Бах —  эта  бесконечная  гирлянда. — 
Самара: Бахрах-М, 2000. 
3. 
Тьюринг А. Может ли машина мыслить. — М.: Физматгиз, 1950. 
4. 
Лорьер Ж.-Л. Системы искусственного интеллекта. — М.: Мир, 1991. 
5. 
Ермаков И. Е. Лекции с обзором языков программирования.  
6.   
Непейвода  Н.  Стили  и  методы  программирования.  Курс  лекций. 
Учебное  пособие. —  М.:  Интернет-университет  информационных 
технологий, 2005. 
7. 
Пентковский  В. М.  Язык  программирования  Эль-76.  Принципы 
построения  языка  и  руководство  к  пользованию. —  2-е  изд.,  испр.  и 
доп. — М.: Физматлит, 1989. 
8. 
Хамби Э. Программирование таблиц решений. — М.: Мир, 1976. 
9. 
Вирт  Н.  Систематическое  программирование.  Введение. —  М.:  Мир, 
1977. 
10. 
Кнут Д. Искусство программирования. В 3 т. — М.: Вильямс, 2012. 
11. 
Керниган  Б.,  Ритчи  Д.  Язык  программирования  Си. 2-е  изд.—  М.: 
Издательский дом «Вильямс», 2013. 
12. 
C/С++.  Программирование  на  языке  высокого  уровня  /  Т.А. 
Павловская — СПб.: Питер, 2011 . 
13. 
Пустоваров 
В. И. 
Язык 
ассемблера 
в 
программировании 
информационных и управляющих систем. — М.: ДЕСС, 1998. 
14. 
Стерлинг  Л.,  Шапиро  Э.  Искусство  программирования  на  языке 
Пролог. — М.: Мир, 1990. 
15. 
Тюгашев А.А. Графические языки программирования и их применение 
в системах управления реального времени. — Самара: Изд-во СНЦ РАН 
, 2009. 
16. 
ГОСТ  19.701–90.  Единая  система  программной  документации.  Схемы 
алгоритмов,  программ,  данных  и  систем.  Условные  обозначения  и 
правила выполнения. — М.: Госстандарт, 1991. 
17. 
Коварцев  А. Н.  Автоматизация  разработки  и  тестирования 
программных  средств  /  Изд-во  Самар.  гос.  аэрокосм.  ун-та —  Самара, 
1999. 


160 
 
18. 
Харьковский  З.  Путеводитель  автостопщика  по  потаенным  знаниям  // 
Компьютерра.-  2005.  № 12. — С. 42–52. 
19. 
Страуструп  Б.  Язык  программирования  С++.  3-е  изд. —  М.:  Бином, 
2011. 
20. 
Кулямин  В. В.  Перспективы  интеграции  методов  верификации 
программного обеспечения // Труды ИСП РАН. — 2009. — Т.16:-С.73-
88,  
21. 
Дейкстра Э. Дисциплина программирования. — М.: Мир, 1978. 
22. 
Паронджанов В. Д. Как улучшить работу ума. — М.: Дело, 2001. 
23. 
Кауфман В. Языки программирования. Концепции и принципы. — М.: 
ДМК Пресс, 2011. 
24. 
Пратт  Т.,  Зелковиц  М.  Языки  программирования:  разработка  и 
реализация / Под общей ред. А. Матросова. — СПб.: Питер, 2002. 
25. 
Абельсон  Х.,  Сассман  Д.  Структура  и  интерпретация  компьютерных 
программ. — М.: Добросвет, 2010. 
 
 
  
 


 


Достарыңызбен бөлісу:
1   ...   73   74   75   76   77   78   79   80   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет