Системный анализ технологий программирования
Изучение понятия системного анализа - логически связанной совокупности положений из области математики и опыта практики разработки сложных систем, обеспечивающей повышение обоснованности решения конкретной проблемы. Связь со структурным программированием.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.07.2012 |
Размер файла | 178,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Системный анализ технологий программирования
Перечень сокращений
ООП - объектно-ориентированное программирование
ООАП - объектно-ориентированный анализ и проектирование
Эдсгер Дейкстра - нидерландский учёный, идеи которого оказали влияние на развитие компьютерной индустрии
Декомпозиция - разбитие на подзадачи
Г.С. Цейтин - Доктор физико-математических наук, профессор, заведующий лабораторией интеллектуальных систем НИИ математики и механики СПбГУ
АСУ - автоматизированная система управления
СОД - система обработки данных
TP - Turbo Pascal
Симула-67 - первый в мире объектно-ориентированный язык программирования
Smalltalk-80 - объектно-ориентированный язык программирования с динамической типизацией
C++ - компилируемый статически типизированный язык программирования общего назначения
Objective-C( Objective C, ObjC или Obj-C) - компилируемый объектно-ориентированный язык программирования корпорации Apple, построенный на основе языка Си и парадигм Smalltalk.
Object Pascal и Turbo Pascal - язык программирования, разработанный в фирме Apple Computer
CLOS (Common Lisp Object System) - система объектно-ориентированного программирования, являющаяся частью Common Lisp -- стандарта языка Лисп
Eiffel - объектно-ориентированный язык программирования с алголоподобным синтаксисом, разработанный Бертраном Мейером. В этом языке впервые был реализован метод контрактного программирования
Java -- объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems
СУБД - система управления базами данных
Введение
Системный анализ - методология решения проблем, основанная на структуризации систем и количественном сравнении альтернатив.
Системный анализ - логически связанная совокупность теоретических и эмпирических положений из области математики, естественных наук и опыта практики разработки сложных систем, обеспечивающая повышение обоснованности решения конкретной проблемы.
Системный анализ - это улучшающее вмешательство в проблемную ситуацию Уемов А.И. Системный подход и общая теория систем М.:Мысль, 1978 -272с..
Системный анализ как научное направление имеет более давнюю историю, чем ООП и ООАП, и собственный предмет исследования. Центральным понятием системного анализа является понятие системы, под которой понимается совокупность объектов, компонентов или элементов произвольной природы, образующих некоторую целостность. Определяющей предпосылкой выделения некоторой совокупности как системы является возникновение у нее новых свойств, которых не имеют составляющие ее элементы. Примеров систем можно привести достаточно много - это персональный компьютер, автомобиль, человек, биосфера, программа и др. Более ортодоксальная точка зрения предполагает, что все окружающие нас предметы являются системами.
Важнейшими характеристиками любой системы являются ее структура и процесс функционирования. Под структурой системы понимают устойчивую во времени совокупность взаимосвязей между ее элементами или компонентами. Именно структура связывает воедино все элементы и препятствует распаду системы на отдельные компоненты. Структура системы может отражать самые различные взаимосвязи, в том числе и вложенность элементов одной системы в другую. В этом случае принято называть более мелкую или вложенную систему подсистемой, а более крупную - метасистемой.
Процесс функционирования системы тесно связан с изменением ее свойств или поведения во времени. При этом важной характеристикой системы является ее состояние, под которым понимается совокупность свойств или признаков, которые в каждый момент времени отражают наиболее существенные особенности поведения системы.
Процесс функционирования системы отражает поведение системы во времени и может быть представлен как последовательное изменение ее состояний: Если система изменяет одно свое состояние на другое, то принято говорить, что система переходит из одного состояния в другое. Совокупность признаков или условий изменения состояний системы в этом случае называется переходом.
Глава 1. Связь со структурным программированием
Проявление принципов системного анализа в программировании. Структурная методология - строгие правила ведения проекта. В 1968 году Эдсгер Дейкстра Эшби У.Р. Введение в кибернетику М: Мир, 1959, -426с. написал статью-письмо "Оператор GOTO необходимо признать вредным". Бем, Яконин доказали, что любой алгоритм может быть реализован при помощи циклов, ветвления, линейных элементов.
Цели структурного программирования:
1) Обеспечить дисциплину программирования
Дейкстра сказал: "структурное программирование - дисциплина, которую программист навязывает сам себе";
2) Читабельность программ (избегать программистских трюков) - локализация действий управляющих конструкций и структур данных;
3) Повышение эффективности программ (из цикла нужно выносить все, что не изменяется в теле цикла, распоряжаться памятью);
4) Уменьшение времени и стоимости программных разработок.
Структурная методология:
1) Принцип абстракции;
2) Формальность;
3) "Принцип "Разделяй и властвуй";
4) Принцип иерархичности.
Стандарты структурного программирования:
1) Программа должна разделяться на модули (подпрограммы, не unit);
2) Модуль - это независимый блок, код которого и физически, и логически отделен от других модулей;
3) Модуль выполняет только одну логически завершенную функцию;
4) Размер модуля не должен превышать сотни операторов;
5) Модуль имеет только одну входную и одну выходную точку;
6) Взаимосвязь между модулями устанавливается по иерархической структуре;
7) Каждый модуль должен начинаться с комментариев;
8) Избегать ненужных меток и операторов GOTO;
9) Идентификаторы должны быть смысловыми;
10) Родственная группа идентификаторов должна начинаться с одинакового префикса;
11) Использовать только стандартные управляющие конструкции;
12) В одной строке использовать не более одного оператора, если он не вмещается, переносить с отступом;
13) Не допускать вложенности IF более 3-х уровней;
14) Избегать неявных языковых конструкций.
Основные этапы разработки программы:
1) Определение требований и анализ проблемы (техническое задание);
2) Проектирование (документ, спецификация программы);
3) Кодирование (реализация) - текст программы;
4) Тестирование (соответствие спецификации);
5) Поддержка, эксплуатация, сопровождение.
Задачи системного анализа:
1) Декомпозиция;
2) Анализ;
3) Синтез.
Принципы системного анализа:
1) Конечной цели;
2) Измерения;
3) Единства;
4) Связности;
5) Модульного построения;
6) Иерархии;
7) Функциональности;
8) Развития;
9) Принцип децентрализации;
10) Неопределенности Гиг Дж., ван. Прикладная общая теория систем М.:Мир,1981, -733с..
Одним из ярчайших примеров торжества идей законов иерархии может служить эволюция вычислительной техники и, в первую очередь, программного обеспечения компьютеров.
Программное обеспечение компьютеров появилось позднее аппаратного. По мере увеличения сложности аппаратуры возрастали и возможности программного обеспечения. Были созданы ассемблеры, компиляторы, операционные системы и системы управления базами данных. Хотя в основе ряда дисциплин, смежных с вычислительной техникой, например, математической логики, лингвистики, теории автоматов, лежит математика, у большинства специалистов до сих пор был и остается подход к разработке программного обеспечения скорее прагматический, нежели теоретический.
А между тем эволюция программного обеспечения, эволюция компьютеров, со всей очевидностью свидетельствует о том, что именно в этой сфере наиболее ярко проявляются законы эволюции, законы иерархии. Предшествующее поколение программистов обучалось программированию непосредственно программированием. Программисты мыслили абстрактными категориями (машинными двоичными кодами). Пользователь получал результат, не зная хода (пути) решения задачи. Выход из тупика вначале был найден на пути структурного (модульного) программирования, при котором задача расчленялась на блоки (модули), из которых потом складывалась та или иная программа. Формировались библиотеки стандартных программ, из которых, как из кирпичиков, строились другие программы.
Структурное программирование явилось прообразом “образного мышления” компьютера, которое постоянно совершенствуется. При этом, чем сложнее сеть деревьев с образами, тем сильнее будут возможности находить и определять “аналогичные” образы, тем больше у компьютера будет “интеллектуальных” возможностей. Дальнейшая эволюция подтвердила стратегическую линию на развитие этих возможностей. В качестве кирпичиков стали использовать сами данные. При этом, чем больше накапливалось данных, тем острее становилась проблема управления этими данными. Поэтому возникли хранилища данных, с механизмами их контроля и управления, которые стали называть базами данных Кристиансен Т., Торкингтон Н. Perl: Библиотека программиста :Пер. с англ.- СПб.: Издательство «Питер», 2000. - 736с..
Программное обеспечение и базы данных все более и более стали напоминать мозг человека. В одном “полушарии” компьютера хранятся листья образов (программы и данные), а в другом - сами образы, которые представляют собой многоуровневые цепочки произвольной длины, имеющие многочисленные зацикливания. В принципе, именно по такому образу и подобию функционируют все иерархические системы. Поэтому можно сказать, что программирование является процессом спектрального разложения образа объекта на две составляющие, из которых первая связывает в строго определенном порядке все элементарные кирпичики образа, а сами кирпичики размещает во втором “полушарии”. Полушарие, отвечающее за образное мышление, естественно, составляет более высокий уровень интеллекта компьютера.
Таким образом, прогресс в вычислительной технике обязан, прежде всего, тому, что человек, не зная об этом, скопировал у природы самый оптимальный способ организации иерархических систем.
Во-первых, это увязывание всех элементов в целостную единую многоуровневую систему.
Во-вторых, это последовательный, строго эволюционный характер создания все более сложных иерархических систем.
В-третьих, это двойственный характер всех программных оболочек и подоболочек, их ограниченность и замкнутость, наличие прямых и обратных связей.
В-четвертых, интеграционный характер совершенствования баз данных, в результате которого и формируется искусственный интеллект компьютера.
Процесс создания искусственного интеллекта можно пояснить следующим образом. В процессе интеграции иерархических структур, характеризующих конкретное решение какой-либо задачи (создание проекта, поиска информации, анализ структур и т.д.), эти частные структурные поддеревья накладываются друг на друга, формируя единую структуру, в которой каждая ветвь на каждом уровне иерархии единой структуры может иметь разное число вхождений в единую структуру. И тем самым создавая естественный механизм нормирования этих ветвей по степени их «полезности» в единой структуре. Поэтому у природы (у компьютера) для каждого уровня иерархии единой структуры имеется естественный механизм формального определения полезности (веса) каждой структурной ветви в относительных единицах.
Дальнейшая эволюция вычислительной техники будет связана с созданием принципиально нового компьютера, который будет способен копировать, воспроизводить и “мыслить” пространственными образами, точно так, как это делает человек. В принципе, эти успехи человека не являются новыми для программирования. Необходимой чертой хорошей реализации структурного стиля программирования является соблюдение согласованности, а в идеале и единства, следующих компонентов программы. Холзнер Стивен. Perl: специальный справочник :Пер. с анг. - СПб.: Питер, 2000. - 496с.
Структура информационного пространства. Содержательно любую задачу можно описать как переработку объектов, полный набор которых называется информационным пространством задачи. Для структурного стиля программирования требуется следующее. Задача разбивается на подзадачи, и таким образом выстраивается дерево вложенности подзадач. Информационное пространство структурируется в точном соответствии с деревом вложенности: для каждой подзадачи оно состоит из ее локальных объектов, определяемых вместе с подзадачей и для нее, и так называемых глобальных объектов, определяемых как информационное пространство непосредственно объемлющей подзадачи. Таким образом, информационное пространство всей задачи (подзадачи самого верхнего уровня) расширяется по мере перехода к подзадачам за счет их локальных объектов Хейл, Бернард Ван. JDBC: Java и базы данных :Пер. с англ. М.,1999. -320с..
Структуры управления. Стиль структурного программирования в его общепринятом варианте предполагает использование строго ограниченного набора управляющих конструкций: последовательность операторов, условные и выбирающие операторы, все вычислительные ветви которых сходятся в одной точке программы, а также процедуры, вычисления которых всегда заканчиваются возвратом управления в точку вызова.
К структурным операторам добавляются либо циклы, либо рекурсии. Концептуальное противоречие между циклами и рекурсиями намного мягче, чем между операторами структурного программирования и структурными переходами, и оно отмечается лишь в виде изредка встречающихся прагматических указаний (благих пожеланий) не смешивать их произвольно.
Потоки передачи данных. Разбивая задачу на подзадачи, программист предусматривает их взаимодействие по данным: одни подзадачи передают другим данные для переработки.
Структуры данных. Данные объединяются в логически связанные фрагменты, соответствующие структурам задачи либо вспомогательных конструкций, вводимых для ее решения.
Призраки. Часто даже сама программа не может быть объяснена через понятия, которые используются внутри нее. Еще чаще это происходит для ее связей с внешним миром. Понимание программы возможно лишь после сопоставления реальных внутрипрограммных объектов с идеальными внепрограммными. Эти идеальные внепрограммные объекты (призраки) часто не просто не нужны, но даже вредны для исполнения программы.
Первым обратил внимание на необходимость введения призраков для логического и концептуального анализа программ Г.С. Цейтин Эферган М. Java: справочник. - СПб.: Питер, 1998. -448с. в 1971 г. Этому важнейшему и традиционно игнорируемому понятию посвящена отдельная лекция в курсе "Основания программирования" .
Подпорки в программе - значения, конструкции и сущности, которые не нужны для понимания задачи и программы, не определяются сущностью задачи и алгоритма, но вынужденно вставляются для реализации данного алгоритма на конкретной системе.
Подготовленные для программирования материалы - алгоритмы и укрупненные схемы программ, получает руководитель группы программистов. Он распределяет задания между программистами, руководствуясь установленными сроками работы над созданием АСУ, параметрами, характеризующими сложность и трудоемкость разрабатываемых программ, квалификацией программистов и другими факторами.
Руководствуясь нормами затрат времени на программирование и необходимого машинного времени ЭВМ, составляют график выполнения работ по этапам. В дальнейшем руководитель группы контролирует соответствие фактических затрат времени предусмотренным в графике, в необходимых случаях консультирует программистов и координирует их работу, участвует в системной отладке.
Временные типовые нормы времени на программирование задач для ЭВМ рассчитаны на комплексы задач или задачи и указаны в человеко-днях при пятидневной рабочей неделе продолжительностью 41 ч в неделю.
По сложности алгоритмы разделены на три группы: оптимизации и моделирования систем и объектов; учета, отчетности, статистики и информационного поиска; стандартных методов решения задач, не требующих применения сложных численных и логических методов.
По виду используемой информации определены три группы: переменной или текущей информации; нормативно-справочной информации; информационной базы.
Нормы времени определены для комплексов задач, имеющих степень новизны В и использующих текущую информацию. При задачах с другими характеристиками используют для пересчета поправочные коэффициенты, в частности для задач группы А-2-5; группы Г-0,4-0,8.
Предполагается использование языков верхнего уровня типа ПЛ/1: для языков низкого уровня применяется коэффициент 1,15. При использовании типовых модулей или пакетов прикладных программ применяется коэффициент 0,6-0,8, а при разработке стандартного математического обеспечения- 1,2-1,6.
Трудоемкость технорабочего проекта определяется как сумма 85% трудоемкости технического и 100% трудоемкости рабочего проектов. Общая трудоемкость программирования определяется как сумма трудоемкостей отдельных этапов работы.
Нормы времени учитывают работы, сопутствующие программированию, такие, как согласование работ внутри группы, проверка и приемка работ, внесение исправлений и дополнений по указанию руководителя и т.п., а также время на обслуживание рабочего места, отдых и личные надобности в размере 10% от оперативного времени. Если в организации более прогрессивные нормы времени, их не следует изменять на основании приводимых ниже Перегудов Ф.И., Тарасенко Ф.П. Введение в системный анализ М.: Высш. школа, 1989, -584с. .
Нормы времени в человеко-днях на различных стадиях проектирования приведены в табл. 1.
Таблица 1
Нормы затрат времени работы ЭВМ определяются в зависимости от тех же приведенных выше основных факторов, которые влияют в наибольшей степени и на трудоемкость программирования, с той разницей, что дополнительно учитывается быстродействие ЭВМ.
Приведенные в табл. 1 для ориентации нормы времени в часах определены для комплексов задач группы В, стандартных методов решения и языков программирования высокого уровня.
Время работы ЭВМ на стадии ввода в эксплуатацию составляет от 10 до 25% времени, указанного в табл. 2. Если внедрение осуществляется заказчиком, затраты машинного времени на отладку должны быть снижены на 10-25% по усмотрению руководителя работ.
Таблица 2
Структурное программирование включает три составляющие: проектирование сверху - вниз; модульное программирование; структурное копирование.
Проектирование сверху - вниз. По существу это иерархический подход к решению поставленной задачи. Метод предусматривает на первом этапе определение задачи в общих чертах и последовательное уточнение ее структуры путем детализации основных функций. На каждом шаге детализации выясняются основные функции, т.е. задача разбивается на ряд подзадач, пока эти подзадачи не станут настолько простыми, что каждая из них может быть представлена несложным программным модулем, действие которого описывается одной фразой.
Метод предусматривает описание данных, их структуры и основных процессов обработки. Описание данных должно включать тщательно отобранные примеры, демонстрирующие выполнение основных функций системы и их наиболее существенные варианты. При описании модуля должны быть описаны тестовые данные.
При проектировании сверху - вниз создание проекта системы по уровням, начиная с верхнего, облегчает реализацию поставленных целей и выявление ошибок на ранних стадиях создания программного обеспечения.
Модульное программирование. В его основе лежит разделение программы на логические части (модули) и последовательное программирование каждой части. Если проведено проектирование всей задачи сверху - вниз, то она разбивается на подзадачи, соответствующие возможным модулям. Разбиение задачи на модули должно обеспечивать независимость реализации каждого программного модуля. Последующее формирование комплекса программ не должно требовать знаний о внутренней работе модуля, т.е. необходимо обеспечить простоту сопряжений программных модулей комплекса.
Следует стремиться к независимости программных модулей. Для этого необходимо, чтобы модуль не зависел от источника входных данных, места назначения выходных данных и от предыстории. Каждый модуль должен иметь свое назначение, отличающееся от назначения других модулей. Это должен быть замкнутый блок, вход и выход которого точно определены. Функциональная независимость модулей сокращает вероятность воздействия изменений в одной подпрограмме на остальные подпрограммы комплекса.
Воздействие изменений в одном модуле на другие модули называют волновым эффектом. Этот эффект можно уменьшить, сведя к минимуму связь между модулями, т.е. сократив количество путей, вдоль которых изменения или ошибки влияют на другие части программы. Простейший путь уменьшения волнового эффекта состоит в сокращении использования глобальных переменных и в сокращении размеров модуля.
Минимизация взаимосвязей между модулями проводится обычно за счет усиления связей между элементами одного модуля (модульной прочности). Высокая степень независимости, характерная для структурного программирования, и минимальная связь модулей приводят к ограничению влияния ошибок в пределах отдельных модулей и к уменьшению как функциональной сложности модуля, так и сложности связей.
Формализация и оптимизация процесса разбиения системы программного обеспечения на модули с учетом приведенных факторов позволяет существенно повысить качество создаваемых комплексов программ и сократить вероятность появления ошибок на дальнейших этапах разработки.
В условиях, когда задано информационное обеспечение, т.е. определено содержание каждого информационного массива и его динамические характеристики, решаются динамические задачи разбиения системы программного обеспечения на модули. В качестве критерия оптимизации используются минимум общего времени обмена с внешней памятью и минимум межмодульного интерфейса.
Исходными данными для постановки и решения динамических задач синтеза системы модулей являются множество информационных массивов системы, для которых определены: входные, выходные и промежуточные данные; множество альтернативных процедур обработки данных, входящих в состав алгоритмов, обеспечивающих решение задач системы; возможные последовательности выполнения процедур в процессе обработки; способы обмена с внешней памятью модульной системы обработки данных; взаимосвязи процедур с информационными массивами; временные характеристики обращения к массивам.
Задачи синтеза систем модулей программного обеспечения СОД сведены к задачам нелинейного целочисленного программирования. Для их решения предложены алгоритмы, использующие схему "ветвей и границ" и особенности функционирования модульных систем обработки данных.
Структурное кодирование. Третьим составным элементом структурного программирования является структурное кодирование, которое представляет собой метод написания хорошо структурированных программных модулей, удобных для тестирования, модификации и использования. Метод аналогичен принципу, положенному в основу проектирования схем, где любая логическая структура может быть создана из элементарных структур И, ИЛИ и НЕ. Структурное кодирование базируется на строго доказанной теореме о структурировании, которая утверждает, что любую правильную программу (с одним входом и одним выходом, без зацикливаний и недостижимых команд) можно написать с использованием следующих логических структур: последовательности двух или более операторов; выбора одного из двух операторов (IF THEN, ELSE); повторения (или управления циклом) оператора, пока выполняется некоторое условие (DO WHILE).
На рис. 1 показаны основные логические структуры: последовательности (рис. 1, а); выбора (рис. 1, б); повторения (рис. 1, в). Каждая структура имеет один вход и один выход. Применение структурного кодирования в значительной степени уменьшает сложность программ. При структурном кодировании структура последовательности формализует тот факт, что операторы программы выполняются в порядке их появления, структура выбора - выбор одного из двух действий исходя из выполнения некоторого условия (оператор IF THEN, ELSE), структура повторения - выполнение группы операторов до тех пор, пока выполняется некоторое условие (оператор DO WHILE или итеративный DO).
Рис. 1. Основные логические структуры: последовательности (а); выбора (б); повторения (в)
Таким образом, чтобы получить структурированную программу, следует избегать операторов GO TO. Каждый программный модуль должен состоять из последовательности операторов IF, THEN, ELSE, циклов или операторов CASE. В случае, если язык не имеет достаточного количества языковых конструкций для структурного программирования (ФОРТРАН, КОБОЛ), рекомендуется применять операторы GO TO только для переходов вперед и там, где возможно заменять их операторами CALL или PERFORM. В языках ПЛ/1 и АЛГОЛ имеется большая часть рекомендованных конструкций, что позволяет легко писать структурированные программы. http://www.by.iatp.org.ua
Структурное программирование улучшает ясность и читабельность программ. Программы, которые написаны с использованием традиционных методов, особенно те, которые перегружены операторами GOTO, имеют хаотичную структуру. Структурированные программы имеют последовательную организацию, поэтому возможно читать такую программу сверху донизу без перерыва.
Наконец, структурное программирование призвано улучшить эффективность программ.
Всякая программа, в соответствии со структурным подходом к программированию, может быть построена только с использованием трех основных типов блоков.
1. Функциональный блок, который на блок-схеме изображается в виде прямоугольников с одним входом и одним выходом:
Функциональному блоку в языках программирования соответствуют операторы ввода и вывода или любой оператор присваивания.
В виде функционального блока может быть изображена любая последовательность операторов, выполняющихся один за другим, имеющая один вход и один выход.
2. Условная конструкция. Этот блок включает проверку некоторого логического условия (P), в зависимости от которого выполняется либо один (S1), либо другой (S2) операторы:
На языке TP:
if <условие> then <оператор1> else <оператор2>;
3. Блок обобщенного цикла. Этот блок обеспечивает многократное повторение выполнения оператора S пока выполнено логическое условие P:
На языке TP циклы реализуются 2 способами.
Цикл с параметром:
for <параметр> := <нач.значение> to <кон.значение>;
. . begin
<оператор1>
. . <оператор2>
. . ...
. end;
Цикл с предусловием:
. while <условие>
. .begin
<оператор1>
. . <оператор2>
. . ...
. end;
Такая структура значительно облегчает чтение и понимание программы, а также упрощает доказательство ее правильности. Так как линейная цепочка блоков может быть сведена к одному блоку, то любая программа может, в конечном итоге, рассматриваться как функциональный единый блок с один входом и одним выходом.
В процессе нисходящего проектирования сохраняется строгая дисциплина программирования, то есть разбиение на подзадачи осуществляется путем применения только рассмотренных типов конструкций (функциональный блок, условная конструкция, обобщенный цикл), поэтому, в конечном итоге, получается хорошо структурированная программа. http://inftech.webservis.ru
Глава 2. Связь с объектно-ориентированным программированием
системный программирование структурный математика
Методология системного анализа служит концептуальной основой системно-ориентированной декомпозиции предметной области. В этом случае исходными компонентами концептуализации являются системы и взаимосвязи между ними. При этом понятие системы является более общим, чем понятия классов и объектов в ООАП. Результатом системного анализа является построение некоторой модели системы или предметной области.
Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая полная реализация была в Smalltalk-80. ООП стало популярным во второй половине 80-х в таких различных языках, как Си-плюс-плюс, Objective C (другое расширение C), Object и Турбо Паскаль (Turbo Pascal), CLOS (ОО-расширение Лиспа), Eiffel, Ада (в её последних воплощениях) и недавно -- в Джаве (Java). Эта работа сосредоточена на Си-плюс-плюс (C++), Обджект Паскале (Object Pascal) и Джава (Java), иногда упоминая и другие языки.
Ключевые черты ООП хорошо известны: http://chip.ua
1. Инкапсуляция -- это определение классов -- пользовательских типов данных, объединяющих своё содержимое в единый тип и реализующих некоторые операции или методы над ним. Классы обычно являются основой модульности, инкапсуляции и абстракции данных в языках ООП.
2. Наследование -- есть способ определения нового типа, наследуя элементы (содержание и методы) существующего и модифицируя или расширяя их. Это способствует выражению специализации и генерализации.
3. Полиморфизм-- позволяет единообразно ссылаться на объекты различных классов (обычно внутри некоторой иерархии). Это делает классы ещё более удобными и делает программы, основанные на них, легче для расширения и поддержки.
Инкапсуляция, наследование и полиморфизм -- фундаментальные свойства, требуемые от языка, претендующего называться объектно-ориентированным (языки, не имеющие наследования и полиморфизма, но имеющие только классы, обычно называются основанными на классах). Различные ОО языки используют совершенно разные подходы. Мы можем различать ОО языки, сравнивая механизм контроля типов, способность поддерживать различные программные модели и то, какие объектные модели они поддерживают.
Программа -- совокупность объектов, указывающих друг другу что делать. Для обращения к одному объекту другой объект «посылает ему сообщение». Как вариант возможно и «ответное сообщение». Программу можно представить себе как совокупность к примеру 3 объектов: писателя, ручки и листа бумаги. Писатель «посылает сообщение» ручке, которая в свою очередь «посылает сообщение» листу бумаги -- в результате мы видим текст (посыл сообщения от листа к писателю).
Каждый объект имеет свою собственную «память» состоящую из других объектов. Таким образом, программист может скрыть сложность программы за довольно простыми объектами. К примеру, дом (достаточно сложный объект) состоит из дверей, комнат, окон, проводки и отопления. Дверь в свою очередь может состоять из собственно двери, ручки, замка и петель. Проводка также состоит из проводов, розеток и к примеру щитка.
У каждого объекта есть тип. Иногда тип называют еще и классом. Класс (тип) определяет, какие сообщения объекты могут посылать друг другу.
Так как мы обсуждаем языки ООП, то после этого введения, начнём обсуждать классы и объекты. Я надеюсь, что каждый ясно понимает разницу между этими двумя терминами. В двух словах, класс - это тип данных, а объект - экземпляр типа класс. http://www.webmasteram.ru
C++: если у нас есть класс MyClass с методом MyMethod, мы можем написать:
MyClass Obj;
Obj.MyMethod();
и получить объект класса MyClass с именем Obj. Память для этого объекта обычно выделяется в стеке, и вы можете сразу начать использовать объект, как это сделано во второй строке.
Java: подобная инструкция выделяет только место для хэндла объекта, а не для самого объекта:
MyClass Obj;
Obj = new MyClass();
Obj.MyMethod();
Прежде чем использовать объект, вы должны вызвать "new" для выделения под него памяти. Конечно, вы можете объявить и проинициализировать объект в одном предложении, избегая использования неинициализированных объектных хэндлов:
MyClass Obj = new MyClass();
Obj.MyMethod();
Object Pascal: использует подобный подход, но (к сожалению) требует отдельных предложений для объявления и инициализации:
var
Obj: MyClass;
begin
Obj := MyClass.Create;
Obj.MyMethod;
Инкапсуляция (Private и Public)
Общим элементом всех трех языков является присутствие трех спецификаторов доступа, указывающих на различные уровни инкапсуляции класса: public, protected, и private. Public означает: видимый любым другим классом, protected означает: видимый производными классами, private означает: отсутствие видимости извне. В деталях, однако, есть различия.
В C++ вы можете использовать ключевое слово friend для обхода инкапсуляции. Видимость по умолчанию для класса -- private, для структур -- public.
В Object Pascal private и protected относятся только к классам других юнитов. В терминах C++, класс является дружественным для любого другого класса, определенного в том же юните (или файле исходного кода). В Delphi есть еще один модификатор доступа -- published, который генерирует информацию времени выполнения (RTTI) об элементах.
В Java отличие синтаксиса в том, что модификатор доступа повторяется для каждого элемента класса. А конкретнее, по умолчанию в Java используется friendly, это значит, что элемент видим для других классов этого же пакета (или файла исходного кода, как в OP). Подобным образом, protected означает видимость для подклассов, тогда как комбинация private protected соответствует protected в C++.
Примечание http://phpclub.unet.ru
Термин "моделирование" имеет довольно много смысловых оттенков, например, моделирование одежды или моделирование прически. Не отрицая важности этих сфер творчества, следует отметить, "что все эти аспекты моделирования лежат за пределами книги. Рассмотрение особенностей языка UML связано с вопросами логического или информационного моделирования систем.
Наиболее общей моделью системы является так называемая модель "черного ящика". В этом случае система представляется в виде прямоугольника, внутреннее устройство которого скрыто от аналитика или неизвестно. Однако система не является полностью изолированной от внешней среды, поскольку последняя оказывает на систему некоторые информационные или материальные воздействия. Такие воздействия получили название входных воздействий. В свою очередь, система также оказывает на среду или другие системы определенные информационные или материальные воздействия, которые получили название выходных воздействий. Графически данная модель может быть изображена следующим образом (рис. 2).
Рис. 2. Графическое изображение модели системы в виде "черного ящика"
Ценность моделей, подобных модели "черного ящика", весьма условна. Невольно может возникнуть ассоциация с "Черным квадратом". Однако если оценка изобразительных особенностей последнего не входит в задачи системного анализа, то общая модель системы содержит некоторую важную информацию о функциональных особенностях данной системы, которые дают представление о ее поведении. Действительно, кроме самой общей информации о том, на какие воздействия реагирует система, и как проявляется эта реакция на окружающие объекты и системы, другой информации мы получить не можем. В рамках системного анализа разработаны определенные методологические средства, позволяющие выполнить дальнейшую конкретизацию общей модели системы.
Процесс разработки адекватных моделей и их последующего конструктивного применения требует не только знания общей методологии системного анализа, но и наличия соответствующих изобразительных средств или языков для фиксации результатов моделирования и их документирования. Очевидно, что естественный язык не вполне подходит для этой цели, поскольку обладает неоднозначностью и неопределенностью. Для построения моделей были разработаны достаточно серьезные теоретические методы, основанные на развитии математических и логических средств моделирования, а также предложены различные формальные и графические нотации, отражающие специфику решаемых задач. Важно представлять, что унификация любого языка моделирования тесно связана с методологией системного моделирования, т. е. с системой воззрений и принципов рассмотрения сложных явлений и объектов как моделей сложных систем.
Сложность системы и, соответственно, ее модели может быть рассмотрена с различных точек зрения. Прежде всего, можно выделить сложность структуры системы, которая характеризуется количеством элементов системы и различными типами взаимосвязей между этими элементами. Если количество элементов превышает некоторое пороговое значение, которое не является строго фиксированным, то такая система может быть названа сложной. Например, если программная СУБД насчитывает более 100 отдельных форм ввода и вывода информации, то многие программисты сочтут ее сложной. Транспортная система современных мегаполисов также может служить примером сложной системы.
Вторым аспектом сложности является сложность процесса функционирования системы. Это может быть связано как с непредсказуемым характером поведения системы, так и невозможностью формального представления правил преобразования входных воздействий в выходные. В качестве примеров сложных программных систем можно привести современные операционные системы, которым присущи черты сложности как структуры, так и поведения.
Заключение
В настоящее время в помощь структурному подходу к программированию появилось новое направление - объектное программирование, не отменяющее, а дополняющее принципы структурного подхода, позволяющее разрабатывать и модернизировать программный код с меньшими затратами времени, распределять задачу программирования между большим количеством программистов.
Языки нацелены на различные потребности, что означает, что они решают разные проблемы разными способами и используются в очень разных средах программирования. Хотя как языки, так и их среда копируют характеристики друг друга, они были сконструированы для разных потребностей, и в этом вы можете убедиться, сравнивая их характеристики.
Просто имейте в виду, что «модный» становится все более частым словом в компьютерном мире. Как пользователи хотят иметь инструменты этого года (вероятно, по этой причине операционные системы называются по тому году, в котором они выпущены), программисты любят работать с последним языком программирования и первыми овладеть им. Можно наверняка утверждать, что Java -- не последний из языков ООП.
Список использованной литературы
1. Уемов А.И. Системный подход и общая теория систем М.:Мысль, 1978 -272с.
2. Перегудов Ф.И., Тарасенко Ф.П. Введение в системный анализ М.: Высш. школа, 1989, -584с.
3. Гиг Дж., ван. Прикладная общая теория систем М.:Мир,1981, -733с.
4. Джейсон Мейнджер. Java: основы программирования :Пер. с англ. - К.: Издательская группа BHV,1997. -320с.
5. Эшби У.Р. Введение в кибернетикуМ: Мир, 1959, -426с.
6. Симкин Стив, Бартлет Нейл, Лесли Алекс. Программирование на Java. Путеводитель :Пер. с англ. - К. НИПФ «ДиаСофт Лтд», 1996, - 736 с.
7. Кристиансен Т., Торкингтон Н. Perl: Библиотека программиста :Пер. с англ.- СПб.: Издательство «Питер», 2000. - 736с.: ил.
8. Холзнер Стивен. Perl: специальный справочник :Пер. с анг. - СПб.: Питер, 2000. - 496с.: ил.
9. Хейл, Бернард Ван. JDBC: Java и базы данных :Пер. с англ. М.,1999. -320с.
10. Эферган М. Java: справочник. - СПб.: Питер, 1998. -448с.
11. http://www.citforum.ru
12. http://www.xpoint.ru
13. http://www.by.iatp.org.ua
14. http://phpclub.unet.ru
15. http://www.webmasteram.ru
16. http://kek.ksu.ru
17. http://inftech.webservis.ru
18. http://dit.vov.ru
Размещено на Allbest.ru
Подобные документы
Характеристика основных тенденций, наиболее характерных для современной практики в области разработки и применения информационных технологий (ИТ). Примеры российского опыта эффективного внедрения ИТ. Категории стратегического влияния ИТ на предприятие.
реферат [27,4 K], добавлен 12.10.2010Обоснование актуальности проблемы. Анализ степени изученности. Структурная сеть для анализа Интернет источников. Описание объекта исследования. Структурная схема оператора сотовой связи. Применение системного анализа для решения проблемы.
курсовая работа [1,6 M], добавлен 26.02.2007Адаптация к будущей трудовой деятельности, связанной с администрированием и проектированием компьютерных сетей. Навыки по выполнению должностных обязанностей системного администратора и/или системного инженера. Использование мастера создания области.
отчет по практике [144,5 K], добавлен 07.12.2009Системы и задачи их анализа. Методы системного анализа: аналитические; математические. Сущность автоматизации управления в сложных системах. Структура системы с управлением, пути совершенствования. Цель автоматизации управления. Этапы приятия решений.
реферат [324,3 K], добавлен 25.07.2010Анализ тенденций развития информационных технологий. Назначение и цели применения систем автоматизированного проектирования на основе системного подхода. Методы обеспечения автоматизации выполнения проектных работ на примере ЗАО "ПКП "Теплый дом".
курсовая работа [210,0 K], добавлен 11.09.2010Основные понятия теории графов. Ценность системного подхода. Представления операций во времени. Структурно-лингвистическое (знаковое) моделирование. Формы и средства графического представления информации. Методы формализованного представления систем.
курсовая работа [2,2 M], добавлен 15.06.2015Появление первых вычислительных машин и возникновение "стихийного" программирования. Структурный подход к декомпозиции сложных систем. Развитие модульного и объектно-ориентированного программирования. Особенности компонентного подхода и CASE-технологий.
презентация [1,5 M], добавлен 14.10.2013Применение информационных технологий в конкретной практической деятельности по выбранной специальности. Использование языка программирования Pascal в инженерной практике как универсального алгоритмического языка. Программа решения задачи на языке Pascal.
курсовая работа [1,3 M], добавлен 25.07.2012Характеристика основных методов линейного программирования с n- переменными, в частности, графического и симплекс-метода. Способы решения задачи по определению оптимальной структуры товарооборота, обеспечивающей торговому предприятию максимум прибыли.
курсовая работа [678,7 K], добавлен 03.04.2011Понятие информации и роль компьютерных и Интернет-технологий в современном мире. Плюсы и минусы внедрения ERP-систем. Языки программирования для разработки Web-приложений. Методология разработки интерактивного справочника. Расчёт эксплуатационных затрат.
дипломная работа [962,7 K], добавлен 13.10.2012