Методика разработки программ

Распространены две методики(стратегии) разработки программ, относящиеся к структурному программированию: программирование «сверху вниз» и программирование «снизу вверх».

Программирование «сверху вниз», или нисходящее проектирование программ – это методика разработки программ, при которойразработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Сначала выделяется несколько самых глобальных задач, решение которых может быть представлено в общейструктуре функционально независимыми блоками. Разработку логической структуры каждого такого блока и ее модификацию можноосуществлять независимо от остальных блоков. На этом первом этапе проекта раскрываются наиболее важные и существенные связи, определяется функциональное назначение каждого блока, его входные и выходные данные. На последующих этапах проектированияуточняется (детализируется) логическая структура отдельных функциональных блоков общей схемы, что также может осуществлятьсяв несколько этапов детализации вплоть до простейших инструкций. На каждом этапе проекта выполняются многократные проверки иисправления.

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

Программирование «снизу вверх», или восходящее проектирование программ– это методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то времякогда проработка общей схемы не закончилась. Такая методика является менее предпочтительной по сравнению с нисходящим проектированием, так как часто приводит к нежелательным результатампереписыванию кода и увеличению времени разработки. Ее применение может быть целесообразным, когда в новом проекте используются известные частные решения.

Общие принципы разработки

Использование технологии структурного программирования при разработке серьезных программныхкомплексов основано на следующих принципах:

- программирование должно осуществляться «сверху вниз»;

- весь проект должен быть разбит на подпрограммы с одним входом и одним выходом;

- любая подпрограмма должна допускать только три основные структуры: последовательное выполнение операторов, ветвление и цикл;

- недопустим оператор goto безусловной передачи управления в любую точку программы;

- документация должна создаваться одновременно с программированием, частично в виде комментариев к программе.

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

Тема 15. Объектно-ориентированное программирование

1. Основные понятия

2. Концепции объектно-ориентированного программирования

Основные понятия

Объектно-ориентированное (объектное) программирование(ООП) – парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

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

В настоящее время количество языков программирования, используемых для создания различных приложений и реализующихобъектно-ориентированную парадигму, достаточно большое. В области системного программирования общепринятым языком являлся язык C, в котором применяется процедурный стиль программирования. В настоящее время при взаимодействии системного иприкладного уровней операционных систем большое значение имеют языки объектно-ориентированного программирования, например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

Основные понятия. Абстракция данных– подход к обработкеданных по принципу черного ящика. Данные обрабатываются функцией высокого уровня с помощью вызова функций более низкогоуровня. Это позволяет работать с объектами, не вдаваясь в особенности их реализации.

Пример задания абстрактной функции (без ее реализации в данном классе) приведен в листинге 15.1 (синтаксис зависит от языкапрограммирования). Функция уже известна, но ее конкретная реализация будет выполнена на более низком уровне – в классах-потомках.

Листинг 15.1. Пример объявления абстрактного метода

intCalculate ();

Класс– это тип, описывающий структуру объектов – экземпляров. Под классом подразумевается некая сущность, которая определяет общее поведение объектов этого класса (через методы), а такжепозволяет хранить состояние объекта (используя поля класса). Классможно сравнить со схемой, согласно которой создаются объектыэтого класса. Обычно классы разрабатывают таким образом, чтобыих объекты соответствовали объектам предметной области.

Пример определения класса приведен в листинге 15.2 (синтаксисзависит от языка программирования).

Листинг 15.2. Пример объявления класса

classClient

{

}

Члены класса. Класс определяется в виде списка своих членов. К членам класса относятся егополя (свойства) и функции (методы).

Для каждого члена класса можно установить соответствующуюобласть доступа (accesscontrollevel). Область доступа члена классаопределяет участки кода, из которых к этому члену будет возможнообращение.

В большинстве объектно-ориентированных языков программирования поддерживаются следующие области доступа:

- private (закрытый, внутренний член класса) – обращения допускаются только из методов того класса, в котором этот член определен; наследники класса уже не смогут получить доступ к этому члену;

- protected (защищенный, внутренний член иерархии классов) – обращения допускаются из методов того класса, в котором этот член определен, или из любых его классов-наследников;

- public (открытый член класса) – обращения допускаются из любого класса.

Пример задания членов класса приведен в листинге 15.3 (синтаксисзависит от языка программирования).

Листинг 15.3. Пример задания членов класса

classClient

{

private string firstName;

private string lastName;

privateDateTime birthday;

public Client(string parFirstName, string par

LastName, DateTimeparBirthday)

{

firstName = parFirstName;

lastName = par LastName;

birthday = parBirthday;

}

publicintCalculateAge(DateTimeparDate)

{

return (parDate – birthday). Year;

}

}

Интерфейс класса– это набор публичных полей и методовкласса, к которым можно обращаться из других классов, частей программы.

Для примера, в листинге 15.4 в интерфейс класса будут входитьконструкторкласса: Client(stringparFirstName, stringparLastName, DateTimeparBirthday)иметодвычислениявозраста: publicintCalculateAge (DateTimeparDate).

В некоторых языках программирования появились интерфейсыобъявляемые как типы данных, например, в C# можно объявитьинтерфейс класса, который будет содержать объявления методовобязательных для реализации в классах, наследующих данный интерфейс.

Прототип– это объект-образец, по образу и подобию которогосоздаются другие объекты. Если в класс, описанный в предыдущемпримере, добавить метод Clone, который будет возвращать экземпляробъекта, инициированный текущими значениями полей, то можносказать, что класс является прототипом (листинг15.5).

Листинг 15.5. Пример создания класса-прототипа

classClient

{

public Client Clone ()

{

return new Client(this. FIRSTNAME, this. LASTNAME

this. Birthday);

}

}

Абстрактный класс– класс, содержащий хотя бы один абстрактный метод. Абстрактный метод не реализуется для класса, в которомописан, однако должен быть реализован для его неабстрактных потомков.

В некоторых языках объектно-ориентированного программирования создавать экземпляры абстрактных классов запрещено, вдругих это допускается, но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведет кошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нем нет абстрактных методов, именно длязапрещения создания экземпляров.

Абстрактный класс можно рассматривать в качестве интерфейсак семейству классов, порожденному им, но, в отличие от классического интерфейса, абстрактный класс может иметь определенныеметоды, а также свойства.

Абстрактные методы часто являются и виртуальными (переопределяемыми в потомках), поэтому понятия «абстрактный» и «виртуальный» иногда путают.

Пример объявления абстрактного класса представлен в листинге 15.6.

Листинг 15.6. Пример объявления абстрактного класса

abstractclassClient

{

private string firstName;

private string lastName;

privateDateTime birthday;

public Client(string parFirstName, string par

LastName, DateTimeParBirthday);

{

firstName= parFirstName;

LastName= parLastName;

birthday = parBirthday;

}

public abstract intCalculateAge(DateTimeparDate);

}

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

Инстанцирование– создание экземпляра класса, в отличие отслова «создание», применяется не к объекту, а к классу: говорят«создать экземпляр класса» или «инстанцировать класс».

Экземпляр класса– это конкретный описанный объект (существующий в памяти). Класс описывает свойства и методы, которыебудут доступны объекту, относящемуся к этому классу. Экземплярыиспользуют для представления конкретных сущностей реальногомира. Создание экземпляра класса может осуществляться операциейnew(листинг15.7).

Листинг 15.7. Пример объявления экземпляра класса

Clientclient = newClient(“Иван”, “Иванов”, DateTime.Parse (“10.04.1983”));

Наши рекомендации