Понятие алгоритма. Св-ва. Типы. Виды представления алгоритмов. Этапы разработки программы — КиберПедия 

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

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Понятие алгоритма. Св-ва. Типы. Виды представления алгоритмов. Этапы разработки программы

2017-12-22 178
Понятие алгоритма. Св-ва. Типы. Виды представления алгоритмов. Этапы разработки программы 0.00 из 5.00 0 оценок
Заказать работу

Алгоритмизациея –пошагового описания решения задачи.

Алгоритмом - набор правил, расположенных в определенном порядке

Свойства алгоритма

1. Наличие ввода исходных данных.

2. Наличие вывода результата выполнения.

3. Однозначность

4. Общность - алгоритм предназначен для решения некоторого класса задач.

5. Корректность - алгоритм должен давать правильное решение задачи.

6. Конечность - решение задачи должно быть получено за конечное число шагов.

7. Эффективность – для решения задачи должны использоваться ограниченные ресурсы компьютера

1.3. Типы алгоритмов

I. Линейным алгоритмом - выполняются последовательные действия

II. Алгоритм ветвления (условный оператор) выполнение алгоритма может пойти по одной из двух возможных ветвей. зависит от условия.

III. Цикл - повторяющуюся последовательность операторов.

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

Виды представления алгоритмов

1)запись на естественном языке.

2)Псевдокод – полуформальный язык с ограниченным структурным планом. позволяет сосредоточиться на формулировке алгоритма

3) Блок-схема – используется для разработки структуры программы Для изображения используют специальные символы

4) Программирование – запись на выбранном языке программирован

. Этапы разработки программы

постановка задачи;

анализ задачи, формализованное описание задачи, выбор математической модели;

выбор или разработка алгоритма решения задачи;

проектирование общей структуры программы;

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

отладка и верификация программы (исправление алгоритмических и синтаксических ошибок);

получение результата, его интерпретация и, возможно, последующая модификация модели;

публикация или передача заказчику результата работы;

сопровождение программы.

Постановка задачи. На этом этапе задачаформулируется на естественном языке

Анализ задачи включает определение входных и выходных данных, выявление возможных ограничений на их значения и обычно завершается формализованным описанием задачи

Выбор или разработка алгоритма и численного метода решения задачи - проработка алгоритма решения задачи

Проектирование общей структуры программы. На этом этапе происходит "архитектурная" проработка проекта. Определяются те части алгоритма, которые целесообразно оформить в виде подпрограмм модулей. Определяется способ хранения информации Кодирование - это запись алгоритма на языке программирования

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

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

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

Сопровождение программы - консультации заказчику по работе программы, устранение замеченных в процессе ее эксплуатации недостатков, обучение пользователей

 

 

14) объектно-ориентированное программирование на примере vba.

 

 

Поддержка ООП в VBA

VBA представляет средства для использования имеющихся и создания новых объектов. Класс — это общее описание однородных по структуре объектов. Класс задает характеристики и поведение объектов. Классы в VBA оформляются в виде отдельных модулей.

Объявление пользовательских классов

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

Рассмотрим следующий пример: пусть требуется создать класс, описывающий студента. Объект такого класса может представлять в виде свойств такую информацию о студенте, как его имя, отчество и фамилию, дату и место рождения, контактную информацию, пол, паспортные данные и т.п. В качестве методов можно указать возможность редактирования информации, возможность полного или, наоборот, частичного отображения информации о студенте. Семантически такое описание может быть представлено, например, следующим образом:

// псевдокод описания объекта Студент Студент { Фамилия: строка Имя: строка Отчество: строка Дата_рождения: Дата Пол: символьный или логический Контактная_информация: строка } Студент.Полное_имя: строка, только чтение Студент.Полное_описание: строка, только чтение Студент.Править_описание (Нов_Фамилия, Нов_Имя, Нов_Отчество, Нов_Дата_рожд, _ Нов_Пол, Нов_Конт_Инф)

Как видно, такое описание очень напоминает описание пользовательского типа данных. Однако отличие объектного типа в том, что не только данные (Фамилия, Имя и пр.), но и код (Студент.Полное_имя и пр.) размещены совместно (инкапсулированы). Синтаксически, объявление класса в VBA выполняется в специализированной программной единице - модуле класса, куда помещается весь код создаваемого класса. Отметим, что в VBA не существует специальных языковых конструкций, используемых при описании класса (кроме описания свойств), поэтому порядок создания класса удобнее рассмотреть по шагам, а затем прокомментировать:

В редакторе VisualBasic добавляем в проект новый модуль класса (меню "Вставка/Модуль класса"). Откроется окно нового модуля класса.

В окне свойств (F4) задаем имя (Name) модуля (в нашем примере - CStudent). Оно же станет именем класса.

В разделе описаний модуля объявляем закрытые члены класса - обычные переменные уровня модуля (Private), которые будут определять значения свойств.

Инициализируем начальные значения свойств при помощи метода Class_Initialize (конструктора класса).

Определяем свойства для чтения (PropertyLet), для записи (PropertyLet) и объектные свойства (PropertySet).

Создаем методы класса при помощи обычных процедур и функций.

Допустимо также создание метода Class_Terminate (деструктора класса) для удаления объекта из памяти по завершении работы с ним.

По этому алгоритму был создан ранее спроектированный класс CStudent, представляющий описание объекта "студент". Полный код модуля с комментариями приведен в листинге 24.

Листинг 24. Модуль класса

' Закрытые члены класса, прямой доступ к ним невозможен - ' только через свойства PrivatefLastNameAsString ' фамилия PrivatefFirstNameAsString ' имя PrivatefMiddleNameAsString ' отчество PrivatefBirthDayAsDate ' дата рождения PrivatefGenderAsString * 3 ' пол PrivatefContactsAsString ' адрес и телефон ' Конструктор класса. Вызываетсявмоментсозданияобъектнойпеременной Private Sub Class_Initialize() fLastName = "Фамилиянеуказана" fFirstName = "Имянеуказано" fMiddleName = "Отчествонеуказано" fContacts = "Адреснеуказан" End Sub ' Свойствадлячтения Public Property Get LastName() As String LastName = fLastName End Property Public Property Get FirstName() As String FirstName = fFirstName End Property Public Property Get MiddleName() As String MiddleName = fMiddleName End Property Public Property Get BirthDay() As Date BirthDay = fBirthDay End Property Public Property Get Gender() As String Gender = fGender End Property Public Property Get Contacts() As String Contacts = fContacts End Property ' Свойствадлязаписи Public Property Let LastName(ByValNewValue As String) fLastName = NewValue End Property Public Property Let FirstName(ByValNewValue As String) fFirstName = NewValue End Property Public Property Let MiddleName(ByValNewValue As String) fMiddleName = NewValue End Property Public Property Let BirthDay(ByValNewValue As Date) fBirthDay = NewValue End Property Public Property Let Gender(ByValNewValue As String) fGender = NewValue End Property Public Property Let Contacts(ByValNewValue As String) fContacts = NewValue End Property ' СвойстваТОЛЬКОДЛЯЧТЕНИЯ (нетпарных Property Let) Public Property Get FullName() As String FullName = fLastName& " " &fFirstName& " " &fMiddleName End Property Public Property Get FullInfo() As String FullInfo = fLastName&Chr(9) &fFirstName&Chr(9) &fMiddleName&Chr(9) _ &CStr(fBirthDay) &Chr(9) &fGender&Chr(9) &fContacts End Property ' Методдляизменениясвойствобъекта. ' Все параметры объявлены как необязательные (Optional). ' Это позволяет изменять только необходимые поля класса. ' Изменятьполяможноичерезсоответствующиесвойствадлязаписи (Property Let), ' этотметодприведендляпримера Public Sub EditInfo(Optional LastName As String, Optional FirsName As String, _ Optional MiddleName As String, Optional BirthDay As Date, _ Optional Gender As String, Optional Contacts As String) fLastName = LastName fFirstName = FirstName fMiddleName = MiddleName fBirthDay = BirthDay fGender = Gender fContacts = Contacts End Sub

Дополнительные пояснения к коду листинга 24 в части синтаксиса:

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

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

Свойства класса объявляются с ключевым словом Property. При этом функция PropertyGet создает свойство для чтения, а процедура PropertyLet служит для записи значений в свойства базовых типов (в т.ч. массивов и пользовательских типов). Процедура PropertySet служит для присваивания значений членам объектного типа (см. листинг 25). Общий синтаксис объявления свойств:

' для чтения [Public | Private] [Static] PropertyGet<имяФункции> [(<списокАргументов>)] [As<тип>] <операторы> имяФункции = возвращаемое значение [ExitProperty] <операторы> имяФункции = возвращаемое значение EndProperty ' для записи [Public | Private] [Static] PropertyLet<имяПроцедуры> [(<списокАргументов>)] <операторы> [ExitProperty] <операторы>EndProperty ' для работы с объектными членами класса [Public | Private] [Static] PropertySet<имяПроцедуры> [(<списокАргументов>)] <операторы> [ExitProperty] <операторы>EndProperty

Методы класса - это обычные процедуры и функции VBA, которые объявляются в модуле класса и не могут быть использованы самостоятельно.

VBA поддерживает один из основных принципов ООП, наследование, косвенным путем - через встраивание объектов. Т.е. нет прямой возможности создавать классы-потомки на основе ранее созданных классов, но можно объявлять членами класса переменные объектных типов. Пример встраивания приведен в листинге 31, где на основе классов CStudent (Студент) и CFaculty (Факультет) создается класс CGroup, описывающий учебную группу указанного факультета.

Листинг 25. Встраивание

' ---------------------------------------------- ' МодульклассаCFaculty - объект "Факультет" (приведенфрагменткода) ' ---------------------------------------------- Private fTitle As String ' Названиефакультета Public Property Get Title() As String Title = fTitle End Property Public Property Let Title(NewTitle As String) fTitle = NewTitle End Property... ' ---------------------------------------------- ' МодульклассаCGroup - объект "Учебнаягруппа" (приведенфрагменткода) ' ---------------------------------------------- ' Встраиваниеобъектныхчленовкласса Private fFaculty As New CFaculty Dim fStudents() As New CStudent... ' Использование Property Set длязаданиязначенияобъектномучлену Public Property Set Faculty(Title) Set fFaculty = Title End Property ' Чтениеназванияфакультета Public Property Get Faculty() As String Faculty = fFaculty.Title End Property...

Создание объектных переменных

Поскольку класс - не более чем специфичный тип данных, то для его использования в программе требуются переменные, представляющие экземпляры этого класса. Такие переменные, называемые объектными, создаются одним из способов:

явным указанием класса объекта;

ссылкой на ранее созданный объект.

При любом способе создания объектная переменная представляет из себя 4-байтовую ссылку на адрес, где хранится объект. При объявлении такой переменной память для самого объекта может и не отводиться, поэтому может быть не определено и значение ссылки. Задание ссылки на объект, т.е. связывание объектной переменной с самим объектом выполняется двумя способами:

При раннем связывании в момент объявления указывается класс объекта:

Dim<Переменная>As<классОбъекта>

Это позволяет еще на этапе трансляции проверять, допустимы ли те или иные операции над создаваемыми объектами.

При позднем связывании переменная объявляется так:

Dim<Переменная>AsObject

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

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

Private | Public | Dim<имяОбъектнойПеременной>AsNew<имяКласса>

Например:

Public Faculty As New CFaculty Private Groups(3) As New CGroup Dim stud As New CStudent

Использование раннего связывания имеет одно преимущество: явное указание класса позволяет получить доступ к его свойствам и методам уже на этапе разработки в VBE. Это выражается в том, что при введении имени объектной переменной появляется всплывающий список доступных операций над объектом.

Использование объектов

Для обращения к свойствам или методам экземпляра класса в VBA используется точечная нотация:

перем = <имяОбъектнойПеременной>.<Свойство> ' чтение свойства

Или:

<имяОбъектнойПеременной>.<Свойство> = значение ' запись свойства

Для обращения к объектным свойствам следует использовать ключевое слово Set. Вызов методов и передача параметров аналогичны работе с обычными процедурами и функциями. Примеры работы с экземплярами созданных классов - в листинге 26.

 

15)основные понятия объектно-ориентированное программирование

 

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

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

ООП характеризуется следующими принципами (по Алану Кею):

все является объектом;

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

каждый объект имеет независимую память, которая состоит из других объектов;

каждый объект является представителем класса, который выражает общие свойства объектов данного типа;

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

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

Определение 1.1 Абстрагирование (abstraction) -- метод решения задачи, при котором объекты разного рода объединяются общим понятием (концепцией), а затем сгруппированные сущности рассматриваются как элементы единой категории.

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

Определение 1.2 Инкапсуляция (encapsulation) -- техника, при которой несущественная с точки зрения интерфейса объекта информация прячется внутри него.

Определение 1.3 Наследование (inheritance) -- свойство объектов, посредством которого экземпляры класса получают доступ к данным и методам классов-предков без их повторного определения.

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

Определение 1.4 Полиморфизм (polymorphism) -- свойство, позволяющее использовать один и тот же интерфейс для различных действий; полиморфной переменной, например, может соответствовать несколько различных методов.

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

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

Определение 1.6 Объект (object) -- конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, синоним экземпляра.

Значительно более широкий список основных терминов ООП приведен ниже в секции 1.5 текущего параграфа.

Как это уже отмечалось в самом начале курса, Java -- лишь один из объектно-ориентированных языков. Другим активно используемым профессиональными программистами языком ООП, с который мы познакомимся в следующем семестре, является C++. В дальнешем нам предстоит знакомство с такими представителями этого семейства, как Smalltalk, DelphiPascal и CLOS.

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

 


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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



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

0.042 с.