Объектно-ориентированное программирование (ООП) — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Объектно-ориентированное программирование (ООП)

2017-11-17 323
Объектно-ориентированное программирование (ООП) 0.00 из 5.00 0 оценок
Заказать работу

 

Сложности процедурно-ориентированной разработки

При разработке приложения процедурно-ориентированным методом происходит следующее: программист делит всю задачу на небольшие подзадачи и решает их постепенно и зачастую без проведения предварительного планирования. Что особенно популярно при создании небольших приложений методом «напишем и исправим». Впринципе данный подход оправдан, когда создаётся небольшое приложение, которое в дальнейшем не будет сильно усовершенствоваться и разрастаться. В противном случае возникает ряд трудностей, из-за которых проект может быть свёрнут.

Основная проблема здесь - разрозненность процедур и функций, что ведёт к затруднениям хранения глобальных данных. Разрозненные процедуры не знают с какими значениями им работать, т.е. они могут работать с определённым набором данных, но не знают где его взять. Приходиться либо передавать данные процедуре в виде параметров, что приводит к сильному разрастанию заголовка, либо хранить их как глобальные переменные (зачастую это массивы), что также не желательно.

 

Листинг 1.1

Type MyRez=record

Name:string;

Number:integer;

Source: file of byte;

Count:integer;

end;

Var Name: MyRez;

Procedure Rec(DC:CDC; x,y:integer; w,h:integer; color:TColor; 3D:Boolean; vis:file);

Procedure ExecFunc(text1:file; text2:file; cod:integer; pam1:string; pam2:string; pam3:byte; cloud: TForm; MyBat:TSpeedButton; shell:TColor);

Function FindPazzle(size:integer; temp:string; pam1:string; pam2:string; pam3:byte):MyRez;

 

Здесь мы видим, что у нас есть две процедуры и функция с большим количеством входных и выходных параметров. Коментарии отсутствуют, потому что неочень опытные или начинающие программисты писать их не любят. Всё достаточно запутано. Если этот код попадёт на доработку другому человеку, то, наверное, у него возникнет ряд впросов, которые могут завести доработку в тупик:

· для каких целей используются эти методы;

· можно ли их вызовать в произвольном порядке;

· что будет являться результатом работы;

· налагаются ли какие-либо ограничения на параметры;

· что представляют собой входные/выходные файлы и т.д.

Почему не желательно использовать глобальные переменные? Потому что сложно за ними следить. Программист может по невнимательности использовать такую переменную там, где не должен. Уменьшается гибкость кода. При использовании глобальных переменных достаточно сложно определить место ошибки, в случае не корректной работы программы. Возможны и многие другие негативные моменты, которые приводят к искажению результата. Проиллюстрируем ещё один момент следующим примером.

 

Листинг 1.2

Var P:integer; // 0..10

Implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

Begin

p:=1;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

Begin

p:=2;

end;

Здесь мы видим обработчики событий двух таймеров. Если они будут иметь разные интервалы срабатывания, то глобальная переменная P будет менять значение с 1 на 2, и наоборот в практически случайные моменты времени. Если от этой переменной зависят внешние процедуры, то может произойти сбой. Который связан с тем, что программист не ожидал появления, например, цифры 2 в какой-то промежуток времени. Показаный пример достаточно условный, но он позволяет понять, что может произойти с глобальной переменной внутри циклов, рекурсии, работы с несколькими таймерами и потоками, если нет должного контроля.

Когда реализуется задача процедурно-ориентированным методом, часто возникает ещё одно узкое место, которое связано с парадигмой данного метода программирования. Оно связано с присваиванием глобальным переменным какого-то значения, точнее, с отсутствием контроля за величиной этого значения. Расмотрим пример, когда такого контроля нет.

Пусть по условию у нас есть переменная G целого типа integer и она может принимать значения в диапазоне 0..10, и используется, как индекс текущего элемента в динамическом массиве. Далее пусть программа, содержащая этот код, предлагает пользователю ввести вручную номер выбранного элемента в массиве, который будет записан в переменную G. Пользователь, не зная выше указанного ограничения, вводит 12. Это число является целым и входит в диапазон возможных значений типа Integer, поэтому программа разрешает присвоение этого значения переменной G. А далее происходит обращение к элементу с таким индексом, но его нет, и тут возникает ошибка времени исполнения.

Особенно забывают делать такие проверки при написании учебных проектов. Тут конечно сказывается и лень разработчика, и желание сэкономить на чём-то время, но прежде всего причина в том, что вставлять подобные проверки в код, приходиться очень часто – в каждом методе, где используется переменная с ограничением, а зачастую и даже по несколько раз в одном методе. В итоге это просто оказывается неудобно, а подобные процедуры с функциями сильно разрастаются.


Поделиться с друзьями:

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.