- •Раздел 1 программирование || объектно-ориентированное программирование
- •Раздел 1 программирование || объектно-ориентированное программирование
- •9. Создание и обработка исключений на пример с#.
- •1. Общая структура программы на языке с. Роль и задача заголовочных файлов.
- •3. Принципы работы операторов ветвления и циклов, на примере языка с. (проверить)
- •(Проверить, не доделан)
- •Стандартные функции динамического выделения памяти
- •Динамическое выделение памяти для одномерных массивов
- •Динамическое выделение памяти для двумерных массивов
- •N·m·(размер элемента)
- •Умные указатели
- •Класс auto_ptr
- •Класс shared_ptr
- •New/delete и классы
- •Альтернативы new/delete
- •6. Понятие класса, типы классов, члены классов, на примере языка с#.
- •7. Перегрузка операторов и функций на примере языка с#. (проверить, не доделан)
- •9. Создание и обработка исключений на пример с#.
- •11. Стандартные типы данных языка с, операции над ними.
- •12. Стандартные типы данных языка с#, операции над ними.
- •Abstract Class Example:
- •Динамическое приведение указателя
- •Динамическое приведение ссылки
- •Const_cast — константное приведение типов данных
- •Reinterpret_cast — операция приведения типов данных
- •Неявные преобразования
- •Явные преобразования
- •Исключения преобразования типов во время выполнения
- •17. Понятие класса Object в языке c#.
- •Особенности производительности
- •18. Понятие коллекции и принцип работы в с#.
- •(Http://professorweb.Ru/my/csharp/charp_theory/level12/12_1.Php)
- •Раздел 2 базы данных
- •Раздел 2 базы данных
- •Раздел 2 базы данных
- •1. Файловые формы хранения данных. Преимущества и недостатки
- •2. [Done] Сетевые формы хранения данных. Преимущества и недостатки
- •3. Языки разметки как структуры хранения. Преимущества и недостатки
- •4. [Done] Основные понятия реляционных бд и используемая терминология
- •5. Модель данных – определение, реализация в разных формах хранения.
- •6. [Done] Многоуровневая архитектура бд. Субд, ее назначение.
- •7. [Done] Реляционные ключи – назначение, типы, примеры применения
- •8. [Done] Оператор select – формат, последовательность обработки
- •9. Теоретико-множественное описание и характеристические функции отношений. Аксиомы Армстронга
- •10. [Done] Содержание процесса нормализации бд
- •11. [Done] Содержательная трактовка первой нормальной формы бд
- •1Nf tables as representations of relations
- •12. [Done] Содержательная трактовка второй нормальной формы бд
- •13. Унарные операции реляционной алгебры
- •14. Бинарные операции реляционной алгебры
- •15. [Done] Классификация и содержательный смысл различных операций соединения
- •16. [Done]Особенности применения конструкций where, order by, group by, having и агрегирующих функций в языке sql
- •17. [Done] Подзапрос в языке sql: типы, особенности применения
- •18. [Done] Процедурные расширения языка sql – курсоры, подпрограммы, триггеры.
- •19. [Done] Механизм представлений в языке sql
- •20. [Done] Средства поддержки целостности данных в языке sql
- •Раздел 3 операционные системы || администрирование в операционных системах linux
- •Раздел 4 основы проектирования информационных систем || практические вопросы автоматизации предприятий
- •Раздел 4 основы проектирования информационных систем || практические вопросы автоматизации предприятий
- •1. Понятие автоматизации. Основные термины и определения. Цели автоматизации. Основные требования к автоматизации. Процессы автоматизации.
- •3. Анализ объекта автоматизации. Понятие методологии анализа объекта автоматизации. Основные методологии анализа.
- •4. Стандартизация систем. Классификация ис.
- •Раздел 5 анализ и проектирование на uml
- •Раздел 6 теория систем и системный анализ || теория информационных процессов и систем
- •1. Определения системы. Классификации систем, место ит-систем в этих классификациях.
- •2. Основные закономерности систем. (Лекции Гусаровой)
- •3. Модели систем – определение, классификации, содержательные примеры. (лекции Гусаровой)
- •4. Связи в системах – определение, классификации, содержательные примеры.
- •5. Связи в информационных моделях систем – реляционные, онтологические, по управлению; их особенности и содержательные примеры.
- •6. Процессы в теории систем – определения, примеры, содержательная трактовка (Лекции Гусаровой)
- •7. Основные информационные процессы – определения, содержательная трактовка, примеры.
- •8. Процесс обработки данных. Основные постановки задач. Классификация методов реализации процесса обработки данных
- •9. Задачи машинного обучения в обработке данных. Примеры содержательной постановки
- •10. Основные понятия машинного обучения – решающая функция, метод обучения, функция потерь, переобучение. Содержательные примеры.
- •11. Методы регрессионного анализа в обработке данных.
- •12. Статистические методы классификации в обработке данных.
- •13. Метрические методы классификации в обработке данных.
- •14. Линейные методы классификации в обработке данных.
- •15. Нейросетевые методы в обработке данных.
- •16. Методы кластерного анализа в обработке данных.
- •17. Отбор признаков-регрессоров в обработке данных
- •18. Метод главных компонент и его модификации в обработке данных
- •19. Сингулярное разложение матриц в обработке данных
- •Раздел 7
Раздел 1 программирование || объектно-ориентированное программирование
Раздел 1 программирование || объектно-ориентированное программирование
1. Общая структура программы на языке С. Роль и задача заголовочных файлов.
2. Основные принципы ООП, на примере С++. (проверить, не доделан)
3. Принципы работы операторов ветвления и циклов, на примере языка С. (проверить)
4. Передача данных, и получение данных из функции, на примере языка С++.
(проверить, не доделан)
5. Работа с динамической памятью, на примере языков С и С++.
Стандартные функции динамического выделения памяти
Динамическое выделение памяти для одномерных массивов
Динамическое выделение памяти для двумерных массивов
умные указатели
класс auto_ptr
класс shared_ptr
new/delete и классы
альтернативы new/delete
6. Понятие класса, типы классов, члены классов, на примере языка С#.
7. Перегрузка операторов и функций на примере языка С#.
(проверить, не доделан)
8. Создание и обработка исключений на пример С++.
9. Создание и обработка исключений на пример с#.
10. Понятие шаблонов, и работа с шаблонами на примере С++.
11. Стандартные типы данных языка С, операции над ними.
12. Стандартные типы данных языка С#, операции над ними.
13. Понятие структура, принцип работы со структурами на примере C++.
14. Понятие интерфейс, на примере языков С++ и С#.
Abstract Class Example:
15. Наследование классов, на примере языков С++ и С#.
16. Преобразование данных, на примере языков С++ и С#.
static_cast — унарная операция приведения типов данных в С++
dynamic_cast — унарная операция приведения типов данных в С++
Динамическое приведение указателя
Динамическое приведение ссылки
const_cast — константное приведение типов данных
reinterpret_cast — операция приведения типов данных
Неявные преобразования
Явные преобразования
Исключения преобразования типов во время выполнения
17. Понятие класса Object в языке C#.
Особенности производительности
18. Понятие коллекции и принцип работы в С#.
(http://professorweb.ru/my/csharp/charp_theory/level12/12_1.php)
1. Общая структура программы на языке с. Роль и задача заголовочных файлов.
/*Объявление глобальных переменных*/ int main(список параметров) { последовательность операторов } тип_возвращаемого_значения f1(список п { последовательность операторов } тип_возвращаемого_значения f2(список п { последовательность операторов } . . . тип_возвращаемого_значения fN(список п { последовательность операторов }
здесь f1() — fN() означают функции, написанные программистом
Программа на языке Си состоит из одной или более подпрограмм, называемых функциями. Язык Си является блочно-структурированным. Каждый блок заключается в фигурные скобки {}. Основным блоком в программе консольного приложения на языке Си является главная функция, имеющая имя main().
Каждое действие в языке Си заканчивается символом "точка с запятой" - ;. В качестве действия может выступать вызов функции или осуществление некоторых операций.
Имя функции — это коллективное имя группы описаний и операторов,
заключенных в блок (фигурные скобки). За именем функции в круглых скобках указываются параметры функции.
Комментарии в языке Си
В языке Си для комментариев используются символы
/* - начало комментария;
*/ - конец комментария.
Вся последовательность, заключенная между этими символами, является комментарием. Это удобно для написания многострочных комментариев:
int a; /* целая
переменная */
Многострочные комментарии также удобно использовать при отладке для сокрытия от выполнения части кода.
В дополнение к этому, для написания коротких комментариев могут использоваться символы //. При этом комментарием является все, что расположено после символов // и до конца строки:
float b; // вещественная переменная
Главная функция
При выполнении консольного приложения, написанного на языке Си, операционная система компьютера передаёт управление функции с именемmain(). Функцию main() нельзя вызывать из других функций программы, она является управляющей.
Следующие за именем функции круглые скобки предназначены для указания параметров (аргументов), которые передаются в функцию при обращении к ней. В данном случае операционная система не передаёт в функцию main() никаких аргументов, поэтому список аргументов в круглых скобках пустой.
Главную функцию можно записать по-разному:
int main()
void main().
Перед именем функции указывается тип возвращаемого значения. При обращении к главной функции значение возвращается операционной системе. Последняя запись не будет возвращать значения. Однако void main() - не совсем корректная запись, так как сообщает компилятору, что функция main()не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе и сообщает ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Для возврата целочисленного значения перед завершением функции дописывается строка
return 0;
В фигурные скобки заключены описания и операторы, которые в данном случае обеспечивают вывод на экран сообщения "Здравствуй, мир!".
В общем случае программа может содержать несколько функций. Каждая функция имеет список передаваемых в нее параметров, указанный в круглых скобках, и набор операций, заключенных в блок, ограниченный фигурными скобками.
Пример: Вывод на экран сообщения "Hello, world!".
#include <stdio.h> // Подключение библиотеки ввода-вывода
int main() // Главная функция
{
printf("Hello, world!"); // Вывод сообщения
getchar(); // Задержка окна консоли
return 0;
}
У заголовочных файлов особая роль: они устанавливают соглашения по использованию общих идентификаторов (имен) в различных частях программы. Если, например, функция func () реализована в файле a.c, а вызывается в файле b.c, то в оба файла требуется включить директивой #include заголовочный файл, содержащий объявление (прототип) нашей функции. Технически можно обойтись и без заголовочных файлов, но в этом случае функцию можно будет вызвать с произвольными аргументами, и компилятор, за отсутствием соглашений, не выведет ни одной ошибки. Подобный "слепой" подход потенциально опасен и в большинстве случаев свидетельствует о плохом стиле программирования.
Роль и задача заголовочных файлов
Любая достаточно большая программа на Си состоит из файлов. Файлы транслируются Си-компилятором независимо друг от друга и затем объединяются программой-построителем задач, в результате чего создается файл с программой, готовой к выполнению. Файлы, содержащие тексты Си-программы, называются исходными.
В языке Си исходные файлы бывают двух типов:
заголовочные, или h-файлы
файлы реализации, или Cи-файлы
Имена заголовочных файлов имеют расширение ".h". Имена файлов реализации имеют расширения ".c".
Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. При трансляции заголовочных файлов, как правило, никакие объекты не создаются.
Файлы реализации содержат тексты функций и определения глобальных переменных.
Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации - это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.
Файлы реализации могут подключать описания, содержащиеся в заголовочных файлах. Сами заголовочные файлы также могут использовать другие заголовочные файлы. Заголовочный файл подключается с помощью директивы препроцессора #include. Например, описания стандартных функций ввода-вывода включаются с помощью строки:
#include <stdio.h>
Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов. Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например:
#include "mylib.h"
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/01/0106.htm
http://www.urtt.ru/bib/dataindex/oaip/lection/_html/lect_07.htm
http://www.clinuxworld.com/programming/443-multifile-projects
2. Основные принципы ООП, на примере С++. (проверить, не доделан)
'Абстра́кция — в объектно-ориентированном программировании это придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня. Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство. Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик существенных для корректного ее использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы. С точки зрения теории множеств, процесс представляет собой организацию для группы подмножеств своего множества.
Инкапсуля́ция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (что у него внутри?), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public. Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected, internal. Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием). Сокрытие реализации целесообразно применять в следующих случаях: предельная локализация изменений при необходимости таких изменений, прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
class A { public: int a, b; //данные открытого интерфейса int ReturnSomething(); //метод открытого интерфейса private: int Aa, Ab; //скрытые данные void Do_Something(); //скрытый метод };
Класс А инкапсулирует свойства Aa, Ab и метод Do_Something(), представляя внешний интерфейс ReturnSomething, a, b.
Насле́дование — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса. Простое наследование: Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class). В некоторых языках используются абстрактные классы. Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного. Например, абстрактным классом может быть базовый класс «сотрудник вуза», от которого наследуются классы «аспирант», «профессор» и т. д. Так как производные классы имеют общие поля и функции (например, поле «год рождения»), то эти члены класса могут быть описаны в базовом классе. В программе создаются объекты на основе классов «аспирант», «профессор», но нет смысла создавать объект на основе класса «сотрудник вуза».
// Base class class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // Derived class class Rectangle: public Shape { public: int getArea() { return (width * height); } };
Множественное наследование
При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++, от множественного наследования было решено отказаться в пользу интерфейсов. Практически всегда можно обойтись без использования данного механизма. Однако, если такая необходимость все-таки возникла, то, для разрешения конфликтов использования наследованных методов с одинаковыми именами, возможно, например, применить операцию расширения видимости — «::» — для вызова конкретного метода конкретного родителя.
Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1]. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием). Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение: внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именем методов и типами аргументов и их количеством); внутренняя общность — одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (перегрузкой функций, перегрузкой операций).
Формы полиморфизма
Полиморфизм включения
Этот полиморфизм называют чистым полиморфизмом. Применяя такую форму полиморфизма, родственные объекты можно использовать обобщенно. С помощью замещения и полиморфизма включения можно написать один метод для работы со всеми типами объектов TPerson. Используя полиморфизм включения и замещения можно работать с любым объектом, который проходит тест «is-A». Полиморфизм включения упрощает работу по добавлению к программе новых подтипов, так как не нужно добавлять конкретный метод для каждого нового типа, можно использовать уже существующий, только изменив в нем поведение системы. С помощью полиморфизма можно повторно использовать базовый класс; использовать любого потомка или методы, которые использует базовый класс.
Параметрический полиморфизм
Используя Параметрический полиморфизм можно создавать универсальные базовые типы. В случае параметрического полиморфизма, функция реализуется для всех типов одинаково и таким образом функция реализована для произвольного типа. В параметрическом полиморфизме рассматриваются параметрические методы и типы.
Параметрические методы. Если полиморфизм включения влияет на наше восприятие объекта, то параметрические полиморфизм влияет на используемые методы, так как можно создавать методы родственных классов, откладывая объявление типов до времени выполнения. Для избежания написания отдельного метода каждого типа применяется параметрический полиморфизм, при этом тип параметров будет являться таким же параметром, как и операнды.
Параметрические типы. Вместо того, чтобы писать класс для каждого конкретного типа следует создать типы, которые будут реализованы во время выполнения программы то есть мы создаем параметрический тип. Полиморфизм переопределения. Абстрактные методы часто относятся к отложенным методам. Класс, в котором определен этот метод может вызвать метод и полиморфизм обеспечивает вызов подходящей версии отложенного метода в дочерних классах. Специальный полиморфизм допускает специальную реализацию для данных каждого типа. Полиморфизм-перегрузка - это частный случай полиморфизма. С помощью перегрузки одно и то же имя может обозначать различные методы, причем методы могут различаться количеством и типом параметров, то есть не зависят от своих аргументов. Метод может не ограничиваться специфическими типами параметров многих различных типов.
http://gos-it.wikia.com/wiki/Основные_принципы_ООП:_инкапсуляция,_наследование,_полиморфизм
