ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Прикладної або системний ?
         

     

    Інформатика, програмування

    Прикладної або системний?

    Євген Каратаєв

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

    Правильна класифікація часто на перших же кроків розробки (як проектування, так і реалізації) може допомогти у виявленні помилок. Якщо читаєш схему даних або код, призначений для виконання певного завдання, яка класифікується певним чином і при цьому код має ознаки класифікації не відповідної задачі, то в мене спрацьовує рефлекс і цим кодом (схемою, діаграмі) я відразу приписую проблемний хрестик. Незалежно від поточного положення справ розбіжність класифікаційних ознак завдання і реалізації є індикатор принаймні потенційної помилки або міни, яка рано чи пізно спрацює.

    Одним з предметів спорів іноді може виступати поділ як програмістів, так і коду на прикладних і системних. До системним програмістам традиційно відносять розробників операціонок, драйверів, інструменту, а решту - до прикладних. Тут я опишу своє бачення класифікації коду за ознакою - прикладної або системний.

    Відразу можна помовчати, вислухати купу питань і спроб уточнення на зразок "А дивлячись що розуміти під прикладним ". Ось в такому вигляді, щоб було зрозуміло без подібних уточнень, і поведемо далі мова.

    Одна з основних аксіом програмування свідчить, що програма є віртуальна машина для перетворення або передачі інформації, сама по собі є інформаційної сутністю. Програма по відношенню до одного шару є переробником інформації, а по відношенню до іншого шару (операційна система) - Перероблялася інформація. Таким чином, розглядаючи основні способи побудови програм як сутностей в контексті операційної системи, можна стверджувати, що існує об'єкт, який обробляє програму і підтримує її функціонування.

    Зв'язування ж двох протилежних сутностей - алгоритмів як незмінних і виконуваних інформаційних об'єктів і даних як змінних і неісполняемих об'єктів проводиться через певні угоди про виклик. Ці угоди називаються декларацією типу та описують, яким саме чином алгоритм повинен отримувати доступ до гарячої пам'яті. Чудовою ілюстрацією може служити використання в мовах високого рівня розрізнення між знаковим і беззнакові цілим. Програміст для обох типів може використовувати однакові операції, наприклад, складання. Але при цьому транслятор, маючи відомості про тип цілого (знаковий або беззнакові), генерує різний машинний код.

    Подальшим розвитком поняття типу є поняття класу в об'єктно - орієнтованих мовах. Якщо говорити про С + +, то на ньому програміст може змінити в тому числі і вбудовані операції мови, наприклад, визначити операцію складання для рядків. Синтаксично використовуватися ж буде як і раніше оператор додавання, але транслятор, маючи інформацію про тип, буде генерувати код, описаний програмістом в перевантаженому оператора.

    Нескладно бачити, що реалізація типізований доступу в обох випадках спирається на "використовуючи інформацію про тип". Незалежно від того, як саме реалізується підтримка типів - на етапі генерації коду, із застосуванням таблиць віртуальних функцій або приєднанням тегова даних, де-то все одно має існувати відповідна інформація. Саме ця інформація і визначає поведінку виконавчого механізму доступу. Таким чином, що обробляється інформація описується як власне її змістом, так і її форматом доступу.

    Досить загальновідомі відомості, наведені вище, слід розглядати як освіження знань і занурення в контекст питання. Тепер про суть теми. Моя думка з питання розподілу коду на системний або прикладної полягає в правилі - якщо виконання коду і його плин визначається форматом даних, то це системний код, а якщо код залежить від змісту даних, то це прикладної код. Правило дуже просте, хоча й, може бути, спірне. Проте мені воно допомагає в плануванні модулів і в проектуванні.

    Як розрізнити код, що залежить від значень даних і що не залежить від значень даних. Просто треба подивитися точки розгалужень програми (функції), умовних переходів і циклів і визначити, від чого залежить виконання умови. Якщо від значення даних, до того ж оброблюваних, то код повинен бути віднесений до прикладного. Якщо тільки від якихось констант, типів, даних описують формат інших даних, то це системний код. Більш того - така оцінка може виявити очевидні логічні помилки. Наприклад, якщо в коді написано, що якщо параметр беззнакові, то робити одне, а якщо більше 12, то інше. Наведемо кілька прикладів, які демонструють розрізнення прикладного і системного контекстів.

    string func (string str)

    (

    int len = strlen ( str.c_str ());

    for (int i = 0; i

    str [i] = WinToKoi (str [i]);

    return str;

    )

    В цьому прикладі код не залежить від значення символів в рядку. Які б вони не були, програма буде виконуватися так само. Таким чином, цей код є системним.

    string func (int sum)

    (

    if (sum <10)

    return "мало";

    if (sum <100)

    return "нормально";

    if (sum < 1000)

    return "багато";

    return "дуже багато";

    )

    В цьому коді виконання алгоритму явно залежить від значень даних. Тому такий код я класифікують як прикладної.

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

    Крім наведеного правила класифікації коду на системний і прикладної слід звертати увагу на змішаний випадок, що існує в явному вигляді при складанні функцій, що оперують візуальним представленням даних. При візуалізації даних слід враховувати існування національних стандартів подання даних, які можуть відрізнятися так само і форматом подання. Наприклад, при візуалізації часу по російському стандарту слід зазначати годину, хвилину і секунду, а при візуалізації з англійської стандарту слід дописувати ще й символи вистави "AM/PM". Таким чином, код незалежний від значення даних, починає залежати від контексту його роботи, який є дані. Ще більш складний випадок -- формування візуалізації строкового подання із застосуванням особливостей мови, наприклад "сума прописом". До якої категорії віднести таку функцію? Думаю, що до прикладної.

    Наведене правило класифікації, звичайно, не є догма. Але особисто я намагаюся дотримуватися таких простих правил в роботі і вони мені допомагають у проектуванні і відшуканні помилок.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://karataev.nm.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status