Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Структурное программирование - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Мир MS Excel » Работа и общение » Неформальное общение » Структурное программирование (быстро, просто, прозрачно)
Структурное программирование
nerv Дата: Вторник, 18.06.2013, 01:41 | Сообщение № 1
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Всем привет

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

Открываем Википедию, и видим, что

--------------
Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
--------------

Для начала неплохо. И еще немного теории:

--------------
...на практике используют некоторые методы, облегчающие построение и реализацию алгоритмов.

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

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

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

Применяем на практике

В большинстве своем программы обработки данных выглядят следующим образом:
[vba]
Код
Sub Main()
      ' 1. получение исходных данных

      ' 2. магия (манипуляции с данными)

      ' 3. вывод результата
End Sub
[/vba]
Как видите основная часть программы уже написана : )

Один из вариантов детализации:
[vba]
Код
Sub Main()
      Dim Data
        
      Data = GetData(Params) ' функция получения данных
        
      Call DoSomeActions(Data) ' манипуляции с данными

      Call WriteResult(Destination, Data) 'вывод результата
        
      MsgBox "Done", vbInformation
End Sub

Function GetData(Params)
      ' процесс получения данных
End Function

Sub DoSomeActions(Data)
      ' произвести какие-то действия
End Sub

Sub WriteResult(Destination, Data)
      ' выводим результат обработки данных
End Sub
[/vba]

Разумеется, внутри GetData, DoSomeActions и WriteResult можно и даже нужно вызывать другие необходимые функции/процедуры, если того требует задача.

В чем соль:
- благодаря вспомогательным функциям/процедурам, логика "главной" процедура Sub Main не пострадала (не захламлена логикой реализации вспомогательных алгоритмов)
- данный подход позволяет проектировать (строить) программу буквально на лету
- проще тестировать (в виду разбиения логики). Написали, отладили одну часть, переходим к разработке другой
- и т.д.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Вторник, 18.06.2013, 01:44
 
Ответить
СообщениеВсем привет

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

Открываем Википедию, и видим, что

--------------
Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
--------------

Для начала неплохо. И еще немного теории:

--------------
...на практике используют некоторые методы, облегчающие построение и реализацию алгоритмов.

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

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

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

Применяем на практике

В большинстве своем программы обработки данных выглядят следующим образом:
[vba]
Код
Sub Main()
      ' 1. получение исходных данных

      ' 2. магия (манипуляции с данными)

      ' 3. вывод результата
End Sub
[/vba]
Как видите основная часть программы уже написана : )

Один из вариантов детализации:
[vba]
Код
Sub Main()
      Dim Data
        
      Data = GetData(Params) ' функция получения данных
        
      Call DoSomeActions(Data) ' манипуляции с данными

      Call WriteResult(Destination, Data) 'вывод результата
        
      MsgBox "Done", vbInformation
End Sub

Function GetData(Params)
      ' процесс получения данных
End Function

Sub DoSomeActions(Data)
      ' произвести какие-то действия
End Sub

Sub WriteResult(Destination, Data)
      ' выводим результат обработки данных
End Sub
[/vba]

Разумеется, внутри GetData, DoSomeActions и WriteResult можно и даже нужно вызывать другие необходимые функции/процедуры, если того требует задача.

В чем соль:
- благодаря вспомогательным функциям/процедурам, логика "главной" процедура Sub Main не пострадала (не захламлена логикой реализации вспомогательных алгоритмов)
- данный подход позволяет проектировать (строить) программу буквально на лету
- проще тестировать (в виду разбиения логики). Написали, отладили одну часть, переходим к разработке другой
- и т.д.

Автор - nerv
Дата добавления - 18.06.2013 в 01:41
AndreTM Дата: Вторник, 18.06.2013, 03:31 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
"Проектирование сверху вниз" - один из стандартов реализации. Только вот к "структурному программированию" он отношения нынче практически не имеет (а уж если подходить с точки зрения любого функционального языка, то... smile ), или, наоборот, имеет самое непосредственное (и в результате этого мы наблюдаем либо "действие залетевшего дятла", либо игнор исключений с возвратом чуть не в нулевое кольцо... Не смешивай, пожалуйста, парадигму структурного программирования с ООП (поскольку всё же Офис) - простые пользователи и даже отвечающие могут просто не понять...
В качестве примера: возьмём Excel и сделаем реализацию только на событиях - хотя "структура" и будет присутствовать в виде объектной модели приложения, но нам не надо задумываться об уровнях абстрагирования... хотя парадигма "проектирования" соблюдена полностью - просто все "процедуры" уже предусмотрены моделью smile

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


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Вторник, 18.06.2013, 04:13
 
Ответить
Сообщение"Проектирование сверху вниз" - один из стандартов реализации. Только вот к "структурному программированию" он отношения нынче практически не имеет (а уж если подходить с точки зрения любого функционального языка, то... smile ), или, наоборот, имеет самое непосредственное (и в результате этого мы наблюдаем либо "действие залетевшего дятла", либо игнор исключений с возвратом чуть не в нулевое кольцо... Не смешивай, пожалуйста, парадигму структурного программирования с ООП (поскольку всё же Офис) - простые пользователи и даже отвечающие могут просто не понять...
В качестве примера: возьмём Excel и сделаем реализацию только на событиях - хотя "структура" и будет присутствовать в виде объектной модели приложения, но нам не надо задумываться об уровнях абстрагирования... хотя парадигма "проектирования" соблюдена полностью - просто все "процедуры" уже предусмотрены моделью smile

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

Автор - AndreTM
Дата добавления - 18.06.2013 в 03:31
nerv Дата: Вторник, 18.06.2013, 11:20 | Сообщение № 3
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (AndreTM)
"Проектирование сверху вниз" - один из стандартов реализации. Только вот к "структурному программированию" он отношения нынче практически не имеет

не убедил

Цитата
В соответствии с данной методологией
Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
- последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

http://ru.wikipedia.org/wiki....%D0%B2% D0%B0%D0%BD%D0%B8%D0%B5
https://www.google.ru/search?....%80%D0% BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&oq=%D1%81%D1%82%D1%80%D1%83%D0%BA&aqs=chrome.1.57j59j0l2j60j61.3167j0&sourceid=chrome&ie=UTF-8

Цитата (AndreTM)
Не смешивай, пожалуйста, парадигму структурного программирования с ООП

в каком месте я смешал? laugh


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (AndreTM)
"Проектирование сверху вниз" - один из стандартов реализации. Только вот к "структурному программированию" он отношения нынче практически не имеет

не убедил

Цитата
В соответствии с данной методологией
Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
- последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
- ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
- цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

http://ru.wikipedia.org/wiki....%D0%B2% D0%B0%D0%BD%D0%B8%D0%B5
https://www.google.ru/search?....%80%D0% BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&oq=%D1%81%D1%82%D1%80%D1%83%D0%BA&aqs=chrome.1.57j59j0l2j60j61.3167j0&sourceid=chrome&ie=UTF-8

Цитата (AndreTM)
Не смешивай, пожалуйста, парадигму структурного программирования с ООП

в каком месте я смешал? laugh

Автор - nerv
Дата добавления - 18.06.2013 в 11:20
nerv Дата: Вторник, 18.06.2013, 11:27 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

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

что?

[vba]
Код
Sub Main()
     Dim Data
          
     Data = GetData(Params) ' функция получения данных

     if not hasData() then
         msgbox "не удалось получить данные"
         exit sub
     end if
          
     Call DoSomeActions(Data) ' манипуляции с данными

     Call WriteResult(Destination, Data) 'вывод результата
          
     MsgBox "Done", vbInformation
End Sub

Function GetData(Params)
     ' процесс получения данных
     ' ошибка при получении данных
End Function
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (AndreTM)
или, наоборот, имеет самое непосредственное (и в результате этого мы наблюдаем либо "действие залетевшего дятла", либо игнор исключений с возвратом чуть не в нулевое кольцо...

что?

[vba]
Код
Sub Main()
     Dim Data
          
     Data = GetData(Params) ' функция получения данных

     if not hasData() then
         msgbox "не удалось получить данные"
         exit sub
     end if
          
     Call DoSomeActions(Data) ' манипуляции с данными

     Call WriteResult(Destination, Data) 'вывод результата
          
     MsgBox "Done", vbInformation
End Sub

Function GetData(Params)
     ' процесс получения данных
     ' ошибка при получении данных
End Function
[/vba]

Автор - nerv
Дата добавления - 18.06.2013 в 11:27
AndreTM Дата: Вторник, 18.06.2013, 14:42 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
nerv, это я так, от нервов smile
Конечно же, при правильном проектировании - ничего такого не присходит.
Как и в любом деле - если всё делать "правильно" и "как положено", то и результат будет... но жизнь станет такой пресной biggrin


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение nerv, это я так, от нервов smile
Конечно же, при правильном проектировании - ничего такого не присходит.
Как и в любом деле - если всё делать "правильно" и "как положено", то и результат будет... но жизнь станет такой пресной biggrin

Автор - AndreTM
Дата добавления - 18.06.2013 в 14:42
Мир MS Excel » Работа и общение » Неформальное общение » Структурное программирование (быстро, просто, прозрачно)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!