- •1.Краткий обзор агрегатного типа struct.
- •Intcena;
- •Int main()
- •Int cena;
- •Void vyvod(avto s)
- •Int main()
- •3.Понятие объединения union.
- •Void vyvod(avto s, int I)
- •Int main()
- •Intcena;
- •Int main()
- •Int cena;
- •Intmain()
- •Void reset(); …
- •Void Demo::reset() // определениефункции reset( )
- •9.Пример реализации класса для организации обработки символьной строки.
- •Int demochar::length()
- •Int main()
- •10.Пример реализации класса для организации обработки одномерного массива целочисленных значений.
- •11.Инициализация объектов.
- •Int main()
- •12Указатель this.
- •13.Постоянные функции-члены класса.
- •3. Class avto {
- •15. Int main()
- •14.Массив объектов.
- •3. Class avto {
- •24. Int main() {
- •15.Статические переменные-члены и функции-члены класса.
- •17. Staticint GetSumCena() { return SumCena; };
- •19. Staticint SumCena;
- •16 Дружественные функции.
- •8. Friendvoid GetFields(avto&);
- •17 Класс, содержащий переменную-член типа класс.
- •3. Class Date_Avto {
- •16. Class avto {
- •30. Int main()
- •18 Сложность больших программных систем.
- •19 Пять признаков сложной системы.
- •20 Роль декомпозиции, абстракции, иерархии при построении сложных систем.
- •21 Объектная модель.
- •Ood основывается на объектно-ориентированной декомпозиции;
- •25Пример программы с наследованием классов.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •36. Int main(){
- •26 Переопределение функций-членов внутри производного класса.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •30. Int main()
- •5.Classint_Matrix// класс для обработки целочисленной матрицы
- •45. Int main()
- •Int main()
- •2. Usingnamespace std;
- •3. Int main()
- •18. Return 0;
- •Int main()
- •20. F.Write((char*)&s,sizeof(s));
- •7. Intcena;
- •21. F.Write((char*)&s,sizeof(s)); };
- •22. F.Close();
- •25. F.Seekg(sizeof(s), ios_base::beg);
- •26. F.Read((char*)&s,sizeof(s));
16. Class avto {
17. public:
18. avto() : cena(18700), rashod(7.2), name("Ford")
19. { cout <<"Hello from avto !!!"<< endl; }
20. ~avto() { cout <<"Object avto destroy !!!"<< endl; }
21. void OutPut() { cout <<"CENA="<< cena << endl <<
22. "MARKA="<< name << endl <<"RASHOD="<< rashod <<
23. endl <<"DATE VYPUSKA -> "; date_vypuska.OutPut(); }
24. private:
25. char* name;
26. int cena;
27. double rashod;
28. Date_Avto date_vypuska;
29. };
30. Int main()
31. {
32. avto A; A.OutPut();
33. cout <<" ***** +++++ "<< endl;
34. Date_Avto B; B.OutPut();
35. cout <<" +++++ ***** "<< endl;
36.return 0;
37. }
В строках с 3 по 15 включительно определен класс Date_Avto. В этом классе определены явныйконструктор, явныйдеструктор и методOutPut() (см. стр. 5-10) для вывода на экран даты, сформированной на основе значений трех полей (day, month, year).
В строках с 16 по 29 включительно определен класс avto. В этом классе определеныявныйконструктор, явныйдеструктор и методOutPut() (см. стр. 18-23) для вывода значений 4 полей класса.
Отметим, что вызов явного конструктора класса Date_Avto автоматически выполняется неявным конструктором класса avto, и только затем выполняется явныйконструктор класса avto.
“Расформирование” (уничтожение) объекта класса avto начинается с запуска явного деструктора этого класса. Затем во время выполнения неявного деструктора класса avtoзапускается явный деструктор класса Date_Avto.
18 Сложность больших программных систем.
В книге одного из самых известных и уважаемых специалистов в области объектно-ориентированной методологии Гради Буча “Объектно-ориентированный анализ и проектирование с примерами приложений на С++” глава, посвященная проблеме сложности программного обеспечения, начинается с изложения следующей истории:
Существуют сложные и не очень сложные (простые) программные системы. Например, имеются программы, и даже программные системы, которые проектируются и разрабатываются, сопровождаются и используются одним человеком. Основной особенностью подобных систем является то, что они обычно имеют достаточно ограниченную область применения и короткое время жизни, а потому их относят к классу простых систем. Для большинства же пользователей и программистов интерес представляют промышленные программные продукты, отличительной чертой которых является относительно высокий уровень их сложности, когда один разработчик практически не в состоянии охватить все аспекты такой программной системы.
Сложность присуща всем большим программным системам в том смысле, что с ней можно справиться, но избавиться от нее нельзя. Выделяют следующие четыре основные причины, по которым, программное обеспечение (ПО) обладает таким свойством как сложность:
сложность реальной предметной области, для которой разрабатывается программное обеспечение;
трудность управления процессом разработки;
необходимость обеспечить достаточную гибкость программы;
проблема описания поведения больших систем.
Говоря о сложности реальной предметной области, следует отметить, что проблемы, которые пытаются решить с помощью ПО, часто содержат сложные подзадачи, а к соответствующим программным комплексам предъявляется большое число различных, нередко взаимоисключающих требований. Кроме того, практически всегда возникают “тонкие” места, связанные с взаимодействием между пользователями системы и ее разработчиками, поскольку пользователи с трудом могут объяснить в полном объеме и в понятной разработчикам форме, что же в конечном итоге необходимо сделать. Дополнительные сложности возникают и в результате изменений требований к программной системе уже в процессе разработки и внедрения.
Трудность управления процессом разработки связана с тем, что реализация программной системы предполагает привлечение коллектива разработчиков, а потому неизбежно возникают проблемы, связанные с организацией коллективной разработки. При коллективном выполнении проекта главной задачей руководства является поддержание единства и целостности разработки.
Гибкость программного обеспечения проявляется в том, что разработчик сам может создавать различные базовые конструктивные элементы, на основе которых в дальнейшем будет проводить реализацию программной системы. По этой причине программные разработки остаются трудоемким занятием.
Проблема описания поведения больших дискретных систем связана с тем, что на сегодняшний день не имеется ни математического аппарата, ни интеллектуальных возможностей для полного моделирования поведения больших дискретных систем, а потому приходится удовлетворяться разумным уровнем уверенности в их правильности. Отметим, что программные системы (ПС) относятся к типу дискретных, так как внутри них существуют сотни переменных и несколько потоков управления. Полный набор этих переменных, их текущих значений, текущих адресов, значения характеристик потоков управления описывает состояние прикладной ПС в каждый момент времени. Поскольку выполнение программ осуществляется на компьютере, то мы имеем систему с дискретными состояниями.