А тепер - перше завдання квесту.
Вам дано конкретну задачу з аналітичної геометрії. Насправді завдання звучить так: "Написати для бібліотеки Geometry фунцію, процедуру або метод певного об'єкту, конструктор тощо, залежно від конкретної задачі (надалі - модуль), яка буде розв'язувати БУДЬ-ЯКУ задачу такого типу, незалежно від конкретних чисел, що стоять в умові задачі для прикладу.
Категоричними умовами, яких треба дотримуватися, є таке. У бібліотеці, яку ми всі пишемо, вже прийнято певні рішення щодо програмної реалізації основних понять геометрії у вигляді певних структур даних (class мови C++). Це означає, що Ваш модуль повинен приймати вхідну інформацію і повертати результат у термінах цих типів даних. Тобто, якщо Ваше завдання звучить так: "Записати рівняння прямої лінії (площини, конуса тощо), яка (який)...", то Ви маєте написати конструктор відповідного класу, що отримує вхідні параметри -- змінні типу об'єктів, що відповідають певним поняттям геометрії. Якщо сказано "Записати рівняння прямої лінії, яка проходить через таку-то точку та такі-то пряму та площину", то Вашою задачею є написання конструктора змінної-нащадка прямої типу tLine, вхідними даними якого КАТЕГОРИЧНО мають бути саме змінні типу tPoint *, tLine * та tPlane *.
На етапі проектування псувати саму бібліотеку Geometry не варто. Для завдання типу "Записати рівняння прямої лінії, яка проходить через таку-то точку та такі-то пряму та площину" Ви, наприклад, маєте здійснити БАГАТОфайловий проект.
1. Бібліотека Geometry, яку НЕ МОЖНА міняти текстуально. Це файли geometry.h та geometry.cpp.
2. Header-файл (напр., MyLine.h у якому утворюєте свій класс та пишете свій конструктор, наприклад, такий:
#include
#include "geometry.h"
/* Тут мають бути директиви включення всіх
файлів того варіанту бібліотеки,
що Ви її ообрали за базовий. */
...
// Спадкуємо клас tMyLine від tLine
class tMyLine: public tLine
{
private:
...
public:
tMyLine(tPlane *p, tPoint *M, int &RC);
};
tMyLine::tMyLine(tPlane *p, tPoint *M, int &RC)
{
...
}
3. Ваша головна програма:
#include
#include "geometry.h"
#include "MyLine.h"
int main()
{
tPlane *p;
tPoint *M;
tLine *L2;
int RC; // Ретурн коде! :)
tMyLine *L;
// tMyLine for Geometry. V1.0 (C) Ipsayenko Vovchyk, 2011
cout << "tMyLine for Geometry. V1.0 (C) Ipsayenko Vovchyk, 2011" << endl;
// Тут треба задати початкові значення для вхідних величин
L = new tMyLine(p, M, L2, RC);
if ((L == NULL) || (RC != 0))
... // все пропало...
else {
// нє, ще не все!
...
delete L;
}
}
Ретельна перевірка коректності вхідних даних - ще одна хороша думка, що прийшла була колись в голову бігбосу на етапі розробки специфікацій. Який мануал не пиши, а дурний користувач обов'язково спроможеться передати до Вашого модуля некоректні дані. Коректна реакція на некоректні дані користувача - це гречно, шляхетно та кошерно. А якщо програма на помилкові вхідні дані реагує "злітанням" та "вивалюванням" в операційну систему, це просто ознака непрофесійності авторів розробки. Випишіть всі варіанти некоректностей, що можуть трапитися через фантазії користувача. А може, й через ляпи ваших колег, що працюють поруч. Всі ці перевірки треба буде реалізувати у вашому модулі.
Чи є у Вашої задачі варіанти наборів коректних вхідних даних, що їх доведеться обробляти за різними алгоритмами? Чи не забули Ви реалізувати їх всі? А реалізувавши, чи відтестували?
Головна програма Вашого проекту пишеться лише з метою продемонструвати роботу Вашої функції або процедури. Тому до інтерфейсу (діалогу з користувачем) вимог аж ніяких. Зате є жорстка вимога щодо ВІДСУТНОСТІ виведення куди-небудь усередені тієї процедури, що її Вам замовлено. Спілкуватися "зі світом широким" Ваш конструктор має через список параметрів, а не засобами введення-виведення, які є різними у різних середовищах та у різних користувачів, а ми тут пишемо пакет з претензією на універсальність.
Ось це все бігбос Тарас і висловив нашому герою, розвалившись у своєму фотелі, закинувши ноги на приставний столик, явно копіюючи своїх американських замовників, і потягуючи каву з горнятка.
За другим разом Вовчик все зробив як слід, роботу здав. Випробувальний термін минув, і тепер він - у штаті.
А Ви?
|