Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ограничение принципа модульности  (Прочитано 5911 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 10-06-2005 22:29 » 

В книге Т. Бадд "ООП" на стр. 18 я прочитал о том, что:
Цитата
«Модули
В некотором смысле модули можно рассматривать просто как улучшенный метод создания и управления совокупностями имен и связанными с ними значениями. Наш пример со стеком является типичным в том аспекте, что имеется определенная информация (интерфейсные процедуры), которую мы хотим сделать широко и открыто используемой, в то время как доступ к некоторым данным (собственно данные стека) должен быть ограничен. Если рассматривать модуль как абстрактную концепцию, сведенную к своей простейшей форме, то ее суть состоит в разбиении пространства имен на две части. Открытая (public) часть является доступной извне модуля, закрытая (private) часть доступна только внутри модуля. Типы, данные (переменные) и процедуры могут быть отнесены к любой из двух частей.
Дэвид Парнас [Parnas 1972] популяризовал понятие модулей. Он сформулировал следующие два принципа их правильного использования:
1.   Пользователя, который намеревается использовать модуль, следует снабдить всей
информацией, необходимой, чтобы делать это корректно, и не более того.
2.   Разработчика следует снабдить всей информацией, необходимой для создания
модуля, и не более того.
Эта философия в значительной мере напоминает военную доктрину «необходимого знания»: если вам не нужно знать определенную информацию, вы и не должны иметь к ней доступа. Это явное, намеренное и целенаправленное утаивание информации называется маскировкой информации (information hiding).
Модули решают некоторые, но не все проблемы разработки программного обеспечения. Например, они позволяют нашему программисту скрыть детали реализации стека, но что делать, если другие пользователи захотят иметь два (или более) стека?
В качестве более сложного примера предположим, что программист заявляет, что им разработан новый тип числовых объектов, названный Complex. Он определил арифметические операции для комплексных величин — сложение, вычитание, умножение и т. д. и ввел подпрограммы для преобразования обычных чисел в комплексные и обратно. Имеется лишь одна маленькая проблема: можно манипулировать только с одним комплексным числом.
Комплексные числа вряд ли будут полезны при таком ограничении, но это именно та ситуация, в которой мы оказываемся в случае простых модулей. Последние, взятые сами по себе, обеспечивают эффективный механизм маскировки информации, но они не позволяют осуществлять размножение экземпляров, под которым мы понимаем возможность сделать много копий областей данных. Чтобы справиться с проблемой размножения, специалистам по информатике потребовалось разработать новую концепцию.
»
И вот в этом месте:
Цитата
Например, они позволяют нашему программисту скрыть детали реализации стека, но что делать, если другие пользователи захотят иметь два (или более) стека?
В качестве более сложного примера предположим, что программист заявляет, что им разработан новый тип числовых объектов, названный Complex. Он определил арифметические операции для комплексных величин — сложение, вычитание, умножение и т. д. и ввел подпрограммы для преобразования обычных чисел в комплексные и обратно. Имеется лишь одна маленькая проблема: можно манипулировать только с одним комплексным числом.
Я не пойму, почему нельзя иметь 2 или более стека?
Какой такой принцип простого модуля не позволяет это делать?
Что подразумевается под простым модулем?
Если в какой то строчке об этом говорится, то покажите. Или же здесь это просто констатируется как факт?
« Последнее редактирование: 10-06-2005 22:37 от Olegator » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 11-06-2005 09:23 » new

Хотя конечно нельзя понять до конца весь смысл, только по выдранному куску текста из контекста. Я так понял, что в данном отрывке приводится пример простого функционального программирования без динамической реализации данных через операторы new - delete.
Простой пример:
Stek.h
Код:
#ifndef STEK_H
#define STEK_H
// В случае удачи возрашается 1, в случае неудачи 0
int InitStek(int a);                   //Иницилизируем стэк числом
int Push(int a);                      //Загоняем в стек число
int Pop(void);                         //Вытаскиваем число из стэка
#endif

Stek.cpp
Код:
#include "Stek.h"
//----------------------------------------------------------------------------------
#define MaxStek 1024
int stek[MaxStek];                                           //Сам стэк
DWORD beg1;                                               //Бегуны по стэку
DWORD beg2;
//----------------------------------------------------------------------------------

int InitStek(int a)
{
    for(int i=0; i<MaxStek; i++) stek[i]=a;
    beg1=0;
    beg2=0;
   return 1;
}

int Push(int a)
{
   int res=0;
   beg1++;
   if (MaxStek == beg1) beg1=0;
   if (beg1 != beg2)
      {
        stek[beg1]=a;
        res=1;
      }
   return res;
}

int Pop(void)
{
   res=0;
   if (beg1 != beg2)
     {
      beg2++;
      if (beg2 == MaxStek) beg2=0;
      res=stek[beg2];
     }
   return res;
}

В коде есть один маленький глюк. Писал в живую и не проверял его в работе. Но если этот модуль подключиш к своей программе. То у тебя получится подключить всего один экземпляр. Естественно у тебя будет всего 1 стэк. Скорее всего после этого в книге идет плавный переход к ООП.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 11-06-2005 13:22 » 

Дальше идут абстрактные типы данных, а затем уже ООП.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines