Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Сущность и история развития объектно-ориентированного программирования).pdf
Добавлен: 29.03.2023
Просмотров: 385
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Теоретическая основа объектно-ориентированного программирования
1.1 Сущность и история развития объектно-ориентированного программирования
1.2 Главные понятия и разновидности
1.3 Основные принципы в объектно-ориентированном программировании
2. Характеристика и анализ объектно-ориентированного программирования
2.1. Критика объектно-ориентированного программирования
2.2. Аспекты критики объектно-ориентированного программирования
3. Проектирование, используя объектно-ориентированное программирование
3.1 Описание предметной области
Данная оценка многочисленна, однако касается она не ООП как таковое, а оптимальность и пригодность в определенных вариантах этих либо других реализаций ее элементов. Один с любимейших предметов оценки считается язык C++, входящий в количество более общераспространенных индустриальных языков объектно-ориентированного программирования.
Производительность объектных программ. Гради Буч показывает на последующие предпосылки, погружающие к уменьшению производительности программ из-за применения объектно-ориентированных средств:
Динамическое связывание методов. Предоставление полиморфного действия объектов приводит к потребности объединять способы, порождаемые программой (то есть определять, тот или иной непосредственно способ станет вызываться) никак не в стадии компиляции, а в ходе выполнения программы, на то что расходуется вспомогательное время. При данном действительно динамическое соединение необходимо не более чем для 20 % вызовов, однако определенные языки объектно-ориентированного программирования применяют его регулярно. [14]
Значительная глубина абстракции. Разработка объектно-ориентированного программирования зачастую приводит к формированию «многослойных» дополнений, где осуществление объектом необходимого воздействия объединяется к большому количеству обращений к объектам наиболее невысокого степени. В этом дополнении совершается весьма большое количество вызовов методов и возвратов из методов, то что, безусловно, влияет на производительности. [3]
Наследование «размывает» код. Код, принадлежащий к «оконечным» классам иерархии наследования (какие как правило и применяются проектом напрямую) - пребывает не только лишь в самих этих классах, однако и в их классах-праотцах. Принадлежащие к одному классу способы, по сути, описываются в различных классах. Данное приводит к двум малоприятным факторам:
-Уменьшается скорость трансляции, таким образом равно как компоновщику доводится подгружать описания абсолютно всех классов иерархии.
-Уменьшается эффективность программы в системе с страничной памятью - так как методы одного класса на физическом уровне пребывают в различных зонах кода, далеко друг от друга, при работе фрагментов программы, стремительно обращающихся к унаследованным способам, система обязана осуществлять нередкие переключения страничек.
Инкапсуляция снижает скорость доступа к данным. Запрещение на непосредственный доступ к полям класса снаружи приводит к потребности формирования и применения способов допуска. И написание, и компиляция, и выполнение способов допуска связано с добавочными затратами.
Динамическое создание и уничтожение объектов. Подвижно формируемые объекты, равно как принцип, располагаются в куче, что меньше результативно, нежели расположение их в стеке и, этим наиболее, постоянное акцентирование памяти под них в стадии компиляции. Невзирая на указанные минусы, Буч заявляет, то что выгоды с применения объектно-ориентированного программирования наиболее весомы. Помимо этого, увеличение производительности за счёт наилучшей организации кодировки объектно-ориентированного программирования, согласно его словам, в определенных случаях возместит вспомогательные мнимые затраты на организацию функционирования программы. [6]
Возможно также отметить, то что многочисленные результаты уменьшения производительности имеют все шансы сглаживаться или даже целиком удаляться за счёт высококачественной оптимизации кодировки компилятором. К примеру, перечисленное выше сокращение скорости допуска к полям класса из-за применения способов допуска устраняется, если компилятор вместо вызова способа допуска применяет он-лайн подстановку (нынешние компиляторы совершают данное абсолютно уверенно).
3. Проектирование, используя объектно-ориентированное программирование
3.1 Описание предметной области
Приступим к исследованию класса «Подсчет успеваемости студентов».
Первоначально опишем предметную область.
У всех студентов имеются Ф.И.О и средний балл.
Допустим, в группе учится 20 студентов.
У студентов могут смениться как личные данные, так и средний балл успеваемости.
Требуется обладать способностью, находить студентов с разной величиной балла. От самого высокого, до самого низкого.
3.2 Проектирование класса
Для представления предметной области необходим класс student. Опишем его подробно.
class student{
int id,
char* soname,
char* name,
char* phone,
float bal,
}
Подробно опишем каждое из полей класса student.
id – аутентификация учащегося. У всех учащихся есть свой личный номер, который не меняется не при каких обстоятельствах. Следовательно, хватит одной функции, которая будет устанавливать номер учащегося.
soname – фамилия студента. Это поле может быть изменено, по этому нужно создать функцию, способную изменять его.
name – имя студента. Это поле меняться не должно, по этому, хватит функции, которая будет находить по имени.
phone – телефонный номер учащегося. Считается, что студент имеет всего один номер телефона. Это поле возможно будет меняться, поэтому создаем функцию, которая будет делать это.
bal – средний балл студента. Это поле возможно будет меняться, поэтому создаем функцию, которая будет делать это.
Поля: soname, name, phone, bal являются внутренними переменными класса – private. Эти переменные доступны только внутри самого класса. К данным переменным нельзя обратиться. [12]
3.3 Проектирование методов класса
Восполним созданный класс абсолютно всеми важными методами для работы с внутренними неустойчивыми класса. Спроектируем конструктор класса. Особый блок инструкций, который, вызывается во время создания объекта в ООП, является конструктором класса.
Он похож на метод, но разница в том, что класс не обладает образом конкретного вида возвращаемых данных и как правило содержит разнообразные принципы для рассматриваемых модификаторов. Конструкторы зачастую акцентируются наличием идентичного имени с наименованием класса, в котором объявляется. Их цель - инициализировать члены объекта и установить инвариант класса, оповестив в случае ошибки инварианта. Правильно составленный конструктор сохранит объект в «правильном» состоянии. Так же конструктор должен проинициализировать неизменяемые объекты.
Наименования класса и конструкторов всегда идентичны.
В данном случае конструктор только лишь инициализирует внутренние переменные класса.
student (int id, char* s, char* n, char* p, float b = 0) {
this->id = id;
this-> soname = s;
this-> name = n;
this-> phone = p;
this-> bal = b;
}
Добавим в класс все необходимые методы.
Это методы, которые устанавливают значение внутренним переменных и извлекают их из класса.
/*функция возвращает фамилию студента*/
char* getSoname (){
return this-> soname;
}
/*функция возвращает имя студента*/
char* getName (){
return this-> name;
}
/*функция возвращает телефон студента*/
char* getPhone (){
return this-> phone;
}
/*функция возвращает идентификатор студента*/
int getId (){
return this-> id;
}
/*функция возвращает средний балл студента*/
float getBal (){
return this-> bal;
}
/*функция устанавливает фамилию студента*/
void setSoname (char* s){
this-> soname = s;
}
/*функция устанавливает имя студента*/
void setName (char* n){
this-> name = n;
}
/*функция устанавливает идентификатор студента*/
void setId (int id){
this-> id = id;
}
/*функция устанавливает средний балл студента*/
void setBal (float b){
this-> bal = b;
}
Заключение
При написании данной работы были решены следующие задачи:
-Усвоена основная теория ООП;
-Изучена история и степень развития ООП;
-Исследованы главные тезисы ООП;
-Изучены высказывания об ООП различного вида;
-Практически освоены основы ООП;
-На практике разработано приложения об успевании учащихся с помощью языка С++;
ООП считается на сегодняшний день базой всей промышленности прикладного программирования из-за выигрыша в конкурентоспособной войне с другими технологиями программирования. В промышленном программировании только в системном программировании позиции объектно-ориентированного программирования еще не очень сильны. По этой причине, с одной стороны, теоретические размышления о непригодности ООП никак не отвечают видимым в практике условиям. С другой стороны, невозможно рассматривать, то, что ООП в абсолютно всех случаях считается лучшей из методов программирования.
Процедурное программирование предпочтительно для ситуации, когда значимы быстродействие и употребляемые средства, объектное - если значима контролируемость проекта и его модифицируемость, а кроме того защищенность проектов. Процедурное программирование, как правило, предпочтительно подойдет для не очень больших проектов, объектное - для больших.
Применение ООП считается превосходным заключением при исследованию больших программных проектов.
Чем проект объемнее и труднее, тем более выгоды вы обретете при применении объектно-ориентированной технологии программирования. Один из максимальных положительных сторон объектно-ориентированного программирования считается вероятность неоднократного применения программной кодировки. В случае если вы, к примеру, создали класс, то можете создавать с него новейшие классы и менять их качества и многофункциональное предназначение.
Список источников
1.Объектно-ориентированное мышление. Автор: Вайсфельд Мэтт. Год: 2018. Страниц: 304.