Вопросы к дифференцированному зачету по курсу Программирование - файл n1.doc

Вопросы к дифференцированному зачету по курсу Программирование
Скачать все файлы (55.5 kb.)

Доступные файлы (1):
n1.doc56kb.01.04.2014 05:56скачать

n1.doc

Вопросы к дифференцированному зачету по курсу Программирование


Теоретическая часть

  1. Каноническая модель вычислений Фон Неймана и ее модификации.

  2. Побудительные причины нарушения канона модели вычислений Фон Неймана.

  3. Особенности традиционных языков и их связь с канонической моделью вычислений.

  4. Повелительное и изъявительное наклонения в языках программирования. На какой базе можно строить модели вычислений с повелительным наклонением?

  5. Системы продукций как основа модели вычислений языка. Привести примеры.

  6. Системы функций как основа модели вычислений языка. Привести примеры.

  7. Коммутационные, ассоциативные и аксиоматические системы и реализуемость моделей вычислений

  8. Что такое стиль программирования? Как стили поддерживаются в языках?

  1. Принципы ленивых и жадных вычислений. Необходимость и возможность вычислений.

  2. Реальная и форсированная необходимость: когда необходимость приходится форсировать?

  3. Метод обобщения специфичного как подход к конструированию языковых средств. Примеры.

  4. Постулаты необходимости и их следствия.

  5. Конкретизации необходимости в императивных и функциональных языках

  6. Примеры ленивых вычислений в императивных языках

  7. Мемоизация в сопоставлении с вспомогательными переменными

  8. Что такое сентенциальное программирование? Рефал и Пролог как примеры сентенциальных языков.

  9. Синтаксический анализ, вычисление предложения и символьное дифференцирование как примеры применения сентенциального стиля для решения задач.

  10. Сопоставление с образцами как метод сентенциального стиля программирования.

  11. Унификация и конкретизация: подходы к означиванию переменных.

  12. Применение продукций в Рефале. Разрешение неоднозначностей.

  13. Основной механизм вычислений в Рефале и его дополнения.

  14. Представление данных в Рефале и как реализуется конкретизация переменных.

  15. Декомпозиция программы: функциональная и структурная декомпозиция.

  16. Черный, белый и серый ящики как методы изучения систем.

  17. Виды декомпозиции и границы их применения.

  18. Концепция Model, View, Controller и постулат разделения сущностей.

  19. Потоки данных между компонентами модели MVC.

  20. Область адекватного применения концепции Model, View, Controller.

  21. Жизненный цикл программного обеспечения: определение и причины изучения моделирования жизненного цикла

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

  23. Каскадная и строгая каскадная модели жизненного цикла. Понятия, связанные с завершением этапов.

  24. Модель фазы—функции Гантера: фазовое измерение.

  25. Модель фазы—функции Гантера: функциональное измерение.

  26. Расщепление линии развития проекта (жизненного цикла): приостановка процесса и действительное расщепление.

  27. Принципы объектно-ориентированного проектирования.

  28. Этапы жизненного цикла при объектно-ориентированном проектировании.

  29. Контрольные точки и вехи проекта.

  30. Ближайшая задача и перспективные задачи проекта. Критерии предпочтения при выборе ближайшей задачи.

  31. — Отражение непрерывности поступления требований в моделях жизненного цикла.

  32. — Сбор и анализ требований как одна из задач проектирования. Унифицированное представление требований.

  33. — Методика анализа требований: лингвистический подход.

  34. — Методика анализа требований: реконструкция деятельности.

  35. — Рекомендации методики системного анализа.

  36. — Сценарии и ситуации использования.

  37. — Виды диаграмм взаимодействия и их назначение.

  38. — Дополнительные требования и особенности их анализа.

ООП

1. Как называются 4 основных принципа ООП?

2. Какие 3 ключевые характеристики определяют объект?

3. Как описать состояние объекта? Опишите возможные состояния объекта "круг", если вы разрабатываете векторный графический редактор.

4. Что такое класс? Приведите пример описания некоторого класса.

5. Что такое UML? Для чего его применяют? Приведите пример какой-нибудь диаграммы.

6. Приведите пример полиморфизма в реальной жизни. Как реализуется полиморфизм в ООП?

7. Назовите паттерны проектирования, которые вам знакомы.

8. Какие виды отношений классов вы знаете? Приведите примеры.

9. Какие концептуальные проблемы вы можете назвать в следующем коде на C++:
class File {

public:

string name; // имя файла

string fullPath; // полный путь к файлу, всегда заканчивается на имя

bool online; // true если компьютер пользователя подключен к интернету
void copyTo(string newPath); // копирует файл

string contents(); // возвращает содержимое файла

};

Как их решить?

10. В каких отношениях могут состоять следующие классы: текст, строка, символ, окно редактирования, выделение текста? Предложите в виде UML или заголовочных файлов С++ их описание.

11. Для чего служат приведенные ниже приемы? Какой из них называется паттерном синглтон? Какие плюсы и минусы каждого из подходов вы можете назвать?

class Foo {

private:

static Foo * instance = NULL;
int prop1;

public:

static Foo * instance() {

if (instance == NULL)

instance = new Foo();

return instance;

}

int getProp1() {

return prop1;

}

void setProp1(int newProp1) {

prop1 = newProp1;

}

private:

Foo() {

//...

}

}

class Foo {

private:

static int prop1;

public:

Foo() { .... }

int getProp1() {

return prop1;

}

void setProp1(int newProp1) {

prop1 = newProp1;

}

}



11. Как в реальной жизни может существовать синглетон?

12. Есть класс Rectangle (прямоугольник), у него есть методы setWidth, setHeight, которые позволяют менять ширину и высоту. Можем ли мы сделать класс Square (квадрат) его потомком? Можно ли это сделать на C++? На Java? Какие для этого должны быть выполнены условия в каждом из языков?

С++
1. Приведите несколько примеров составных и примитивных типов.

2. Что такое абстрактный тип данных?

3. Чем структуры (struct ...) отличаются от классов (class ...)?

4. Какие права доступа к членам классы вы знаете?

5. Как создать объект класса? Что такое конструктор?

6. Что такое деструктор класса? Когда он вызывается?

7. Как определяется конструктор копирования?

8. В каких случаях происходит неявное копирование объекта?

9. Какие методы можно вызвать у объекта класса Foo?

class Bar {

void bar();

};

class Foo : private Bar {

void foo();

};

10. Что такое виртуальная функция?

11. Приведите пример абстрактного класса.

12. Почему деструктор обычно рекомендуется объявлять виртуальным?

13. Как разрешить конфликт, возникший при множественном наследовании:
class Foo {

void a();

};

class Bar {

void a();

};

class Boz : public Foo, public Bar {

};

14. Что такое перегрузка операторов? Приведите пример, как перегрузить оператор "+" у некоторого класса Foo.
15. Дан следующий класс:

class Foo {

int a, int b;

char * data;

size_t dataLength; // размер данных, хранящихся в data

Bar * bar; // объект некоторого другого класса Bar

};

Требуется реализовать максимально корректный копирующий конструктор для него. (Подсказка: иногда в программе случаются исключения)

16. Что такое шаблон? Приведите краткий пример объявления параметризованного класса (например, списка объектов).

17. Что такое исключения? Что выведет приведенная ниже программа?

void badFunction() {

throw MyException();

std::cout << "42" << endl;

}
void sadFunction() {

try {

badFunction()

std::cout << "1" << endl;

} catch (MyException ex) {

std::cout << "2" << endl;

}

std::cout << "3" << endl;

}
18. Как обработать исключение любого типа?

19. Какие проблемы вы видите в следующем коде (приведен полный код программы)? Как их исправить?

class AbstractPrinter {

const char * identifier;

public:

AbstractPrinter(const char * id) { identifier = id; }

void print(const char * message);

};
class StdPrinter : AbstractPrinter {

public:

void print(const char * message) {

cout << identifier << ":" << message << endl;

}

}
void work(AbstractPrinter printer) {

printer->print("hello, world!");

}
int main() {

StdPrinter * printer = new StdPrinter("my printer");

work(printer);

return 0;

}
20. Напишите следующие объявления: указатель на символ, массив из 10 целых, ссылка на массив из десяти целых, указатель на массив символьных строк, указатель на указатель на символ, целая константа, указатель на целую константу, констрантый указатель на целое.

21. Напишите функцию, которая обменивает значение двух целых переменных. В качестве аргумента используйте int*.

22. Напишите функцию, которая обменивает значение двух целых переменных. В качестве аргумента используйте int&.

23. Дана программа:

#include
int main() {

std::cout << "Hello, world" << endl;

}

Сделайте так, чтобы она выводила (содержимое main() изменять нельзя):

Init

Hello, world!

Bye

Учебный текст
© perviydoc.ru
При копировании укажите ссылку.
обратиться к администрации