Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Теоретическая основа объектно-ориентированного программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 271

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Данная оценка многочисленна, однако касается она не ООП как таковое, а оптимальность и пригодность в определенных вариантах этих либо других реализаций ее элементов. Один с любимейших предметов оценки считается язык 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.