Вы находитесь на странице: 1из 36

МОСКОВСКИЙ ЭЛЕКТРОННО-ТЕХНОЛОГИЧЕСКИЙ ТЕХНИКУМ

ГОСУДАРСТВЕННОЙ АКАДЕМИИ ИННОВАЦИЙ

Отчет
о прохождении практики по профилю специальности
(преддипломная)

Место практики Индивидуальный предприниматель Смирнов Алексей


Евгеньевич
Срок прохождения практики с 13.04.2009 по 04.05.2009

Студент Худяков Сергей Сергеевич


Специальность «Программное обеспечение вычислительной техники и
автоматизированных систем» (230105)

Курс 4 группа П-401

Руководитель практики Шипиев Роман Николаевич

Москва
2008/2009 уч.год.
МОСКОВСКИЙ ЭЛЕКТРОННО-ТЕХНОЛОГИЧЕСКИЙ ТЕХНИКУМ
ГОСУДАРСТВЕННОЙ АКАДЕМИИ ИННОВАЦИЙ

Утверждаю
Зам. Директора по УПР
В.П. Сандул
« » 2009г.

ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ
на период преддипломной практики
студента гр. П-401 специальности 230105
Худякова Сергея Сергеевича

ТЕМА ЗАДАНИЯ
Сформулировать технико-математические требования к дипломному проекту
на тему «Разработка системы проведения видео-лекций»

Вопросы, подлежащие изучению:


1. Протокол передачи данных HTTP
2. Архитектура сетевых протоколов REST
3. Архитектура приложений MVC
4. Среда разработки Ruby on Rails
5. Язык разметки гипертекста HTML

Указания по выполнению задания.


Отчет о выполнении индивидуального задания оформляется записью в
дневнике практики. Чертежи и схемы даются в приложении к отчету.

Руководители практики:
от предприятия Смирнов Алексей Евгеньевич (подпись)
от техникума Шипиев Роман Николаевич (подпись)
Индивидуальное задание рассмотрено на цикловой комиссии специальности
«Программное обеспечение ВТ и АС» (230105)

протокол № от 2008/2009 уч.год.


Председатель цикловой комиссии Одиноченко О.В. (подпись)
Дневник
Дата Наименование выполняемой работы Подпись
руководителя
13.04.2009 Изучение вопросов и технологий для
18.04.2009 написания общей части пояснительной
записки диплома
20.04.2009 Написание общей части пояснительной
25.04.2009 записки диплома
27.04.2009 Получение отзыва о практике
28.04.2009 Оформление отчета и дневника по
29.04.2009 практике
30.04.2009 Сдача отчета
02.05.2009
ОГЛАВЛЕНИЕ
Введение.......................................................................................................................5
1. Постановка задачи...................................................................................................6
1.1. Назначение задачи............................................................................................6
1.2. Технико-математическое описание задачи.....................................................6
1.3. Требования к программе................................................................................12
1.4. Требования к составу и параметрам технических средств.........................13
2. Описание языка программирования....................................................................15
2.1. Выбор языка программирования..................................................................15
2.2. Элементы языка программирования.............................................................16
Заключение.................................................................................................................34
5

ВВЕДЕНИЕ
Данный отчет содержит сведения об изученном за время прохождения
преддипломной практики материале.

Тема дипломного проекта: Разработка системы проведения видео-лекций.

Полное название программы: Система проведения видео-лекций.

Краткое название программы: Система.


6

1. ПОСТАНОВКА ЗАДАЧИ

1.1. Назначение задачи

Целью дипломного проекта является разработка системы проведения


видео-лекций.

Главной задачей разрабатываемой системы является задача проведения


лекций в видео-формате.

1.2. Технико-математическое описание задачи

Программа должна быть реализована на базе следующих технологий:

—протокол передачи данных HTTP[1];

—архитектура сетевых протоколов REST[2];

—архитектура приложений MVC[3];

—среда разработки Ruby on Rails[4];

—язык разметки гипертекста HTML;

1.2.1. Протокол передачи данных HTTP

HTTP (сокр. англ. Hypertext Transfer Protocol, «протокол передачи


гипертекста») — это протокол высокого уровня (уровня приложений),
обеспечивающий необходимую скорость передачи данных, требующуюся для
распределённых информационных систем гипермедиа. HTTP используется
проектом World Wide Web с 1990 года.

HTTP/1.0 предоставляет открытое множество методов, которые могут


быть использованы для указания целей запроса. Они построены на дисциплине
ссылок, где для указания ресурса, к которому должен быть применен данный
метод, используется Универсальный Идентификатор Ресурсов (Universal
Resource Identifier — URI), в виде местонахождения (URL) или имени (URN).
7

Формат сообщений сходен с форматом Internet Mail или Multipurpose Internet


Mail Extensions (MIME — Многоцелевое Расширение Почты Internet)

HTTP основывается на парадигме запросов/ответов. Запрашивающая


программа (обычно она называется клиент) устанавливает связь с
обслуживающей программой-получателем (обычно называется сервер) и
посылает запрос серверу в следующей форме: метод запроса, URI, версия
протокола, за которой следует MIME-подобное сообщение, содержащее
управляющую информацию запроса, информацию о клиенте и, может быть,
тело сообщения. Сервер отвечает сообщением, содержащим строку статуса
(включая версию протокола и код статуса — успех или ошибка), за которой
следует MIME-подобное сообщение, включающее в себя информацию о
сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа.
Следует отметить, что одна программа может быть одновременно и клиентом и
сервером. Использование этих терминов в данном тексте относится только к
роли, выполняемой программой в течение данного конкретного сеанса связи, а
не к общим функциям программы.

1.2.2. Архитектура сетевых протоколов REST

REST (сокр. англ. Representational State Transfer, «передача состояния


представления») подход к архитектуре сетевых протоколов, обеспечивающих
доступ к информационным ресурсам.

Идеи, положенные в основу REST, были сформулированы в главе 5


докторской диссертации («Architectural Styles and the Design of Network-based
Software Architectures») по философии Роя Филдинга (Roy Fielding) в 2000 году.
В подходе, использованном в REST, серверы поддерживают связь с клиентами,
используя подключения без указания их статуса: вся информация о состоянии
взаимодействия между двумя системами закодирована внутри запросов и
ответов, которыми они обмениваются. Долгосрочное состояние хранится на
сервере в виде набора идентифицируемых ресурсов.[5]
8

Согласно REST, сетевой ресурс должен поддерживать всего четыре


операции: GET, PUT, POST и DELETE (с теми же значениями, как в протоколе
HTTP). Данные должны передаваться в виде небольшого количества
стандартных форматов (например HTML, XML, JSON). Сетевой протокол (как и
HTTP) должен поддерживать кэширование, не должен зависеть от сетевого
слоя, не должен сохранять информацию о состоянии между парами «запрос-
ответ». Утверждается, что такой подход обеспечивает масштабируемость
системы и позволяет ей эволюционировать с новыми требованиями.

1.2.3. Архитектура приложений MVC

MVC (сокр. англ. Model-View-Controller, «Модель-Представление-


Контроллер») — архитектура для разработки интерактивных приложений,
разработанная Трюгве Реенскаугом (Trygve Reenskaug)[5], в которой модель
данных приложения, пользовательский интерфейс и управляющая логика
разделены на три компонента, так, что модификация одного из компонентов
оказывает минимальное воздействие на другие компоненты.

Шаблон (pattern) MVC позволяет разделить данные, представление и


обработку действий пользователя на три отдельных компонента:

—Модель (Model) отвечает за поддержку состояния приложения. Иногда это


состояние является кратковременным, продолжающимся только на время
нескольких взаимодействий с пользователем. А иногда состояние является
постоянным и сохраняется вне приложения, чаще всего в базе данных. Модель
— это больше, чем просто данные; в ней прописаны все бизнес-правила,
применяемые к этим данным.[5]

—Представление (View) отвечает за формирование пользовательского


интерфейса, который обычно основан на данных модели. Хотя представление
может преподносить пользователю различные способы ввода данных, оно
никогда не занимается их непосредственной обработкой. Работа представления
завершается, как только данные будут отображены.
9

—Контроллеры (Controller) организуют работу приложения. Они воспринимают


события внешнего мира (обычно ввод данных пользователем), взаимодействуют
с моделью и отобажают соответствующее представление для пользователя.

Важно отметить, что как представление, так и поведение зависят от


модели. Однако модель не зависит ни от представления, ни от поведения. Это
одно из ключевых достоинств подобного разделения. Оно позволяет строить
модель независимо от визуального представления, а также создавать несколько
различных представлений для одной модели.

1.2.4. Среда разработки Ruby on Rails

Ruby on Rails – объектно ориентированный программный каркас для


создания веб-приложений, написанных на языке программирования Ruby. Ruby
on Rails использует архитектурный шаблон Model-View-Controller для веб-
приложений, а также обеспечивает их интеграцию с веб-сервером и сервером
базы данных.

Ruby on Rails относится к открытому программному обеспечению и


распространяется под лицензией MIT.

1.2.4.1. Принципы

Ruby on Rails определяет следующие принципы разработки приложений:

—Приложения не должны определять собственную архитектуру, поскольку они


используют готовый каркас модель-представление-контроллер.

—Язык Ruby позволяет использовать легко читаемую нотацию для определения


семантики приложений (таких как отношения между таблицами в базе данных).

—Ruby on Rails предоставляет механизмы повторного использования,


позволяющие минимизировать дублирование кода в приложениях (принцип
Don’t Repeat Yourself).

—По умолчанию используются соглашения по конфигурации, типичные для


10

большинства приложений (принцип Convention over configuration). Явная


спецификация конфигурации требуется только в нестандартных случаях.

1.2.4.2. Архитектура

Основными компонентами приложений Ruby on Rails являются модель


(model), представление (view) и контроллер (controller).

Модель предоставляет остальным компонентам приложения объектно-


ориентированное представление данных (таких как каталог продуктов или
список заказов). Объекты модели осуществляют загрузку и сохранение данных
в реляционной базе данных, а также реализуют бизнес-логику.

Благодаря возможностям динамической типизации в языке Ruby


разработчику достаточно наследовать свой класс модели от базового класса
ActiveRecord::Base. Ruby on Rails автоматически связывает классы модели с
таблицами в базе данных и создает атрибуты объектов для соответствующих
полей таблицы.

Представление создает пользовательский интерфейс для отображения


полученных от контроллера данных. Представление также передает запросы
пользователя на манипуляцию данными в контроллер (как правило,
представление не изменяет непосредственно модель).

В Ruby on Rails представление описывается при помощи шаблонов


RHTML. Они представляют собой файлы HTML с дополнительными
включениями фрагментов кода Ruby (Embedded Ruby или ERb). Вывод,
сгенерированный встроенным кодом Ruby, включается в текст шаблона, после
чего получившаяся страница HTML возвращается пользователю.
Представления могут использовать фрагменты других представлений и, в свою
очередь, быть включенными в шаблон (layout) более высокого уровня.

Контроллер — основной компонент, отвечающий за взаимодействие с


пользователем. Контроллер считывает необходимые данные из модели и
11

подготавливает их для отображения, а также сохраняет полученные от


отображения данные в модели.

Контроллером в Ruby on Rails является класс, наследованный от


ActionController::Base. Открытые методы контроллера являются так
называемыми действиями (actions). Action часто соответствует отдельному
представлению. Например, по запросу пользователя admin/list будет вызван
метод list класса AdminController и затем использовано представление list.rhtml.

1.2.4.3. Интеграция

Ruby on Rails может работать с Apache, Lighttpd или любым другим веб-
сервером, поддерживающим FastCGI. Для разработки и отладки часто
используется встроенный в Ruby веб-сервер WEBrick или Mongrel. С помощью
плагина в Rails реализована поддержка сетевого протокола WebDAV.

В качестве сервера базы данных поддерживаются MySQL, Firebird,


PostgreSQL, IBM DB2, Oracle и Microsoft SQL Server. Также поддерживается
встраиваемая база данных SQLite.

Для Windows существует дистрибутив Instant Rails c настроенной и


готовой к работе сразу после установки рабочей средой для разработки Rails-
приложений, которая включает в себя сервер Apache и СУБД MySQL. Для
платформ Windows, Linux, Mac OS X имеется комплексный установщик
BitNami RubyStack, включающий в себя все необходимое для разработки в
среде Rails, включая Ruby, RubyGems, Ruby on Rails, MySQL, Apache, Mongrel и
Subversion.

Для разработки Ajax-приложений RoR поставляется с интегрированными


JavaScript-библиотеками Prototype и Script.aculo.us, но также можно
использовать и jQuery.

1.2.5. Язык разметки гипертекста HTML

HTML (от англ. HyperText Markup Language — «язык разметки


12

гипертекста») - это стандартный язык разметки документов во Всемирной


паутине. Почти все веб-страницы создаются при помощи языка HTML (или его
потомка — XHTML). Язык HTML интерпретируется браузером и отображается
в виде документа, в удобной для человека форме.

Язык HTML был разработан британским учёным Тимом Бернерсом-Ли


приблизительно в 1991—1992 годах в стенах Европейского совета по ядерным
исследованиям в Женеве (Швейцария). HTML создавался как язык для обмена
научной и технической документацией, пригодный для использования людьми,
не являющимися специалистами в области вёрстки. HTML успешно справлялся
с проблемой сложности SGML путём определения небольшого набора
структурных и семантических элементов (размечаемых «тегами»), служащих
для создания относительно простых, но красиво оформленных документов.
Помимо упрощения структуры документа, в HTML внесена поддержка
гипертекста. Мультимедийные возможности были добавлены позже.
Изначально язык HTML был задуман и создан как средство структурирования и
форматирования документов без их привязки к средствам воспроизведения
(отображения). В идеале, текст с разметкой HTML должен был без
стилистических и структурных искажений воспроизводиться на оборудовании с
различной технической оснащённостью (цветной экран современного
компьютера, монохромный экран органайзера, ограниченный по размерам
экран мобильного телефона или устройства и программы голосового
воспроизведения текстов). Однако современное применение HTML очень
далеко от его изначальной задачи. С течением времени, основная идея
платформонезависимости языка HTML была отдана в своеобразную жертву
современным потребностям в мультимедийном и графическом оформлении.

1.3. Требования к программе

Система должна обеспечить:

—единую пользовательскую систему для преподавателей;


13

—возможность загрузки и просмотра видео;

—возможность добавления видео со сторонних сервисов;

—возможность добавления лекции, а также видео и аннотации к нему;

—возможность создания курсов лекций;

—возможность создания тестирования по лекции с ответами в свободной форме;

—возможность составления статистики по лекциям.

1.4. Требования к составу и параметрам технических средств

Требования к параметрам программно-технических средств для


серверной части:

—процессор с производительностью не ниже Intel Pentium II;

—операционная система семейства Unix (желательно Debian/Ubuntu Server);

—оперативное запоминающее устройство не менее 128 Мб;

—наличие свободного пространства на накопителе жестких магнитных дисков


не менее 300Мб;

—настроенный сетевой интерфейс;

—установленный и настроенный интерпретатор Ruby версии не ниже 1.8.6;

—установленная и настроенная среда разработки Ruby on Rails версии 2.2.2;

—установленная и настроенная СУБД (желательно MySQL или PostgreSQL);

—установленный видео-конвертер ffmpeg и набор кодеков libavcodec;

—сервер для хранения видео-файлов.

Требования к параметрам программно-технических средств для


клиентской части:

—процессор с производительностью не ниже Intel Pentium II;


14

—оперативное запоминающее устройство не менее 128Мб;

—видеокарта;

—клавиатура;

—мышь;

—монитор;

—настроенный сетевой интерфейс;

—наличие веб-обозревателя;

—установленный Adobe Flash Player 9.


15

2. ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ

2.1. Выбор языка программирования

Основным требованием к языку программирования (далее ЯП) была


возможность создания web-приложений (интернет-приложений). Исходя из
этого требования выбор стоял между такими ЯП, как Ruby, Python, Perl и т. д.
Кроме возможности разработки web-приложений эти ЯП имеют следующие
общие характеристики:

—поддерживаются практически всеми web-серверами;

— имеют обширные библиотеки и инструментарии для разработки


web-приложений;

— обладают в той или иной степени объектно-ориентированными


возможностями;

— являются динамическими языками программирования


интерпретируемого типа, что позволяет выполнять множество
операций, которые не доступны статическим языкам
компилируемого типа;

— существуют реализации для всех популярных операционных


систем: Windows, Unix, MacOS, BeOS и других;

— используют более облегченный синтаксис, который позволяет


писать более компактный код.

Выбор остановился на ЯП Ruby по следующим причинам:

—ЯП Ruby позволяет быстро и качественно писать сложные программы;

—ЯП Ruby имеет очень лаконичный синтаксис, благодаря чему с ним удобно и
приятно работать, при этом Ruby не уступает другим языкам по
функциональности;
16

—ЯП Ruby имеет свою интересную концепцию и позволяет придерживаться


принципа DRY (Don't Repeat Yourself - «Не повторяйся»);

—ЯП Ruby имеет отличную среду разработки Ruby on Rails, которая позволяет
писать сложные, но в тоже время гибкие web-приложения в краткие сроки;

—Из личных предпочтений автора данной работы.

2.2. Элементы языка программирования

При разработке системы был использован язык программирования Ruby.

2.2.1. Основные положения языка

— комментарий начинается с символа "решетка" ( # ) и действует до


конца строки (EOL);

— программа на Ruby состоит из последовательности выражений;

— выражения могут разделяться символом "точка с запятой" ( ; ) или


символом конца строки (EOL), кроме случая незаконченного
выражения (например "+" в конце строки);

— «обратный слеш» (\) в конце строки позволяет явно указать, что


выражение незаконченно и окончания следует искать в последующих
строках.

2.2.2. Зарезервированные слова

Т а б л и ц а 1 — список зарезервированных слов

alias and BEGIN begin break case class def defined


do else elsif END end ensure false for if
in module next nil not or redo rescue retry
return self super then true undef unless until when
while yield
17

2.2.3. Типы данных

Базовыми типами являются: числа, строки, диапазоны, регулярные


выражения, символы, массивы и словари. Еще сюда можно было бы добавить
файлы, так как они используются очень часто.

2.2.4. Числа

Существуют следующие формы задания чисел: 123, 1_234, 123.45, 1.2e-3,


0xffff (шестнадцатеричное), 0b01011 (двоичное), 0377 (восьмеричное).

Помимо перечисленных, существуют другие (неявные) формы задания


чисел:

— ?a ASCII код символа "a";

— ?C-a Код сочетания Ctrl+a;

— ?M-a Код сочетания Alt+a;

— ?M-C-a Код сочетания Ctrl+Alt+a;

— :symbol Целое значение, соответствующее


идентификаторам, переменным и операторам.

2.2.5. Строки

Существуют следующие формы задания строк:

— 'без возможности вставки (interpolation)';

— "#{interpolation}, #{$interpolation}, #{@interpolation} и управл.


последоват.\n";

— %q! без возможности вставки (interpolation)!;

— %!Есть вставки и управляющие последовательности!;

— %Q(Есть вставки и управляющие последовательности);


18

— `echo выполнение команды ОС со вставками и управляющими


последовательностями`;

— %x/echo выполнение команды ОС со вставками и управляющими


последовательностями/.

2.2.6. Управляющие последовательности

Используются следующие управляющие последовательности: \t


(табуляция), \n (переход на новую строку), \r (возврат каретки), \f (подача
страницы), \b (удаление последнего символа), \a (звонок), \e (клавиша Отмена), \
s (пробел), \nnn (восьмеричное число) , \nn (шестнадцатеричное число), \сx
(Ctrl+x), \C-x (Ctrl+x), \M-x (Alt+x), \M-\C-x (Ctrl+Alt+x)

2.2.7. Диапазоны

Используются следующие формы задания диапазонов:

— 1..10;

— 'a'..'z';

— (1..10) === 5 => true;

— (1..10) == 15 => false.

2.2.8. Строки

Используются следующие формы задания регулярных выражений:

— /обычное регулярное выражение/i;

— %r|альтернативная форма задания регулярных выражений|.

Задействованы следующие элементы регулярных выражений:

— . любой символ исключая перевод строки;

— [] любой символ из указанных;


19

— [^ ] любой символ, кроме указанных;

— * 0 или более повторений предыдущего


регулярного выражения;

— *? 0 или более повторений предыдущего


регулярного выражения (скупой);

— + 1 или более повторений предыдущего


регулярного выражения;

— +? 1 или более повторений предыдущего


регулярного выражения (скупой);

— ? 0 или 1 повторений предыдущего регулярного


выражения;

— | альтернатива;

— () группировка регулярных выражений;

— ^ начало строки или текста;

— $ конец строки или текста;

— #{m,n} не меньше m и не больше n повторений


предыдущего регулярного выражения;

— #{m,n}? не меньше m и не больше n повторений


предыдущего регулярного выражения (жадный);

— \A начало строки;

— \b граница слова;

— \B не граница слова;

— \d цифра, то есть [0-9];

— \D не цифра, то есть [^0-9];


20

— \s пробельный (whitespace) символ, то есть [ \t\n\r\f];

— \S не пробельный символ, то есть [^ \t\n\r\f];

— \w символ, то есть [0-9a-zA-Z_];

— \W не символ, то есть [^0-9a-zA-Z_];

— \z конец текста;

— \Z конец текста или позиция перед завершающим


переводом строки;

— (?# ) комментарий;

— (?: ) группировка без сохранения;

— (?= ) позитивная опережающая проверка;

— (?! ) негативная опережающая проверка;

— (?ix-ix) включение/отключение режимов для оставшейся


части выражения;

— (?ix-ix: ) включение/отключение режимов для


содержимого скобок;

2.2.9. Массивы

Массивы могут быть заданы одним из следующих способов:

— [1, 2, 3];

— %w(foo bar baz).

Индексы в массивах могут быть отрицательными и отсчет тогда будет


вестись от конца массива (то есть -1 означает "последний элемент").

2.2.10. Словари

Словари (они же ассоциативные массива, они же хеши) могут быть


21

заданы одним из следующих способов:

— { 1 => 2, 2 => 4, 3 => 6 };

— { key => value, ... }.

2.2.11. Файлы

Работа с файлами осуществляется при помощи следующих методов:

— File.join(p1,p2,p3, ... ,pN) => "p1/p2/.../pN" платформонезависимый


путь;

— File.new(path,modestring="r") => file;

— File.new(path,modenum[,permnum])> file/li>;

— File.open(fileName,aModeString="r"){ |file| block } -> block_result;

— File.open(fileName[,aModeNum [, aPermNum]]){ |file| block } ->


block_result;

— IO.foreach(path,setstring=$/){ |line| block } -> block_result;

— IO.readlines( path ) => array;

— IO.read( path ) => string.

2.2.12. Строка для задания режима чтения записи файла

— r чтение с начала файла (режим по умолчанию);

— r+ чтение-запись с начала файла;

— w обнуление или создание файла для записи;

— w+ обнуление или создание файла для чтения-записи;

— a указатель устанавливается на конец файла или создается и


открывается на запись;

— a+ указатель устанавливается на конец файла или создается и


22

открывается на чтение-запись;

— b (только для DOS/Windows) двоичный режим чтения-записи


(используется совместно с другими режимами).

2.2.13. Переменные

— $global_variable глобальные переменные;

— @instance_variable переменные объекта;

— @@class_variable переменные класса;

— [OtherCLass::]CONSTANT константа

— local_variable локальная переменная.

2.2.14. Псевдопеременные

— self возвращает указатель на текущий объект;

— nil единственный объект класса NilClass


(эквивалентен false) и имеет смысл "пустоты";

— true единственный объект класса TrueClass и


имеет смысл "истины";

— false единственный объект класса FalseClass и


имеет смысл "лжи";

— __FILE__ имя обрабатываемого в текущий момент


файла;

— __LINE__ текущий номер строки в обрабатываемом


исходном файле.

2.2.15. Предопределенные переменные

— $! последнее сообщение об ошибке;


23

— $@ местоположение ошибки (массив с


трассировочным стеком);

— $& текст совпадения (регулярные


выражения);

— $` текст перед совпадением


(регулярные выражения);

— $' текст после совпадения (регулярные


выражения);

— $+ текст, совпавший с последней


закрытой парой круглых скобок (регулярные выражения);

— $n n-тое подвыражение в последнем


совпадении, то же самое, что и $~[n]. (регулярные выражения);

— $~ последнее совпадение с регулярным


выражением в виде массива подвыражений;

— $= флаг зависимости от регистра


символов;

— $/ разделитель во входных строках;

— $ разделитель в выходных строках;

— $, разделитель для print и Array#join;

— $; разделитель по умолчанию для


String#split;

— $. номер последней строки,


прочитанной интерпретатором;

— $< результат виртуальной конкатенации


файлов, имена которых переданы в командной строке;
24

— $> источник вывода по умолчанию для


print, printf (по умолчанию равен $stdout);

— $_ последняя строка, прочитанная gets


или readline;

— $0 имя файла с которого началось


выполнение;

— $* аргументы командной строки в виде


массива (аналог args);

— $$ id процесса интерпретатора;

— $? статус завершения последнего


дочернего процесса;

— $: массив путей для загрузки библиотек


и модулей;

— $" массив с именами подключенных


библиотек;

— $DEBUG если интерпретатор запущен с


опцией -d, то равен true (только для чтения);

— $FILENAME текущий обрабатываемый файл при


использовании $<, аналогично вызову $<.filename;

— $LOAD_PATH псевдоним для $:;

— $stderr текущий стандартный поток ошибок;

— $stdin текущий стандартный поток ввода;

— $stdout текущий поток вывода;

— $VERBOSE если интерпретатор запущен с


опцией -v, то равен true (только для чтения);
25

— $-0 псевдоним для $/;

— $-a если интерпретатор запущен с


опцией -a, то равен true (только для чтения);

— $-d псевдоним для $DEBUG;

— $-F псевдоним для $;;

— $-i удерживает расширения, по


умолчанию nil;

— $-I псевдоним для $:;

— $-l если интерпретатор запущен с


опцией -l, то равен true (только для чтения);

— $-p если интерпретатор запущен с


опцией -p, то равен true (только для чтения);

— $-v псевдоним для $VERBOSE.

2.2.16. Предопределенные глобальные константы

— TRUE псевдоним для true;

— FALSE псевдоним для false;

— NIL псевдоним для nil;

— STDIN псевдоним для $stdin;

— STDOUT псевдоним для $stdout;

— STDERR псевдоним для $stderr;

— ENV словарь, который


содержит переменные окружения;

— ARGF псевдоним для $<;


26

— ARGV псевдоним для $*;

— DATA указатель на область


после __END__;

— VERSION строка с версией


интерпретатора;

— RUBY_RELEASE_DATE строка с датой выпуска


интерпретатора;

— RUBY_PLATFORM идентификатор
платформы.

2.2.17. Выражения

Элементом выражения могут быть базовые типы (см. выше), команда


shell, переменная, константа или вызов метода.

2.2.18. Операторы и приоритеты (в порядке убывания)

— ::;

— [];

— **;

— - (унарный), + (унарный), !, ~;

— *, /, %;

— +, -;

— <<, >>;

— &;

— |, ^;

— >, >=, <, <=;


27

— <=>, ==, ===, !=, =~, !~;

— &&;

— ||;

— .., ...;

— = (+=, -= ...);

— not;

— and, or.

Почти все представленные выше операторы являются методами (т.е. их


можно переопределить), кроме следующих: =, .. , ... , !, not, &&, and, ||, or, !=, !~.
В добавок ко всему, над составными операторами (то есть += и др.)
пользователь не властен (то есть зависит от метода +, в случае с +=).

2.2.19. Строки

Существуют следующие условные конструкции:

if логическое_выражение [then]
программный_код
elsif логическое_выражение [then]
программный_код
else
программный_код
end

unless логическое_выражение [then]


программный_код
else
программный_код
end

программный_код unless логическое_выражение

программный_код if логическое_выражение
28

case выражение_для_проверки
when шаблон [, шаблон]... [then]
программный_код
when шаблон [, шаблон]... [then]
программный_код
[else
программный_код]
end

Существуют следующие циклические конструкции:

while логическое_выражение [do]


программный_код
end

until логическое_выражение [do]


программный_код
end

begin
программный_код
end while логическое_выражение

begin
программный_код
end until логическое_выражение

for счетчик[, счетчик]... in множество [do]


программный_код
end

множество.each do | счетчик[, счетчик]... |


программный_код
end

программный_код while логическое_выражение

программный_код until логическое_выражение

Существуют следующие директивы управления циклом:

— break завершает текущий цикл.


29

— redo начинает текущий цикл сначала.

— next переходит к следующей итерации текущего цикла.

— retry повторяет итерацию без проверки условия для тещего цикла.

2.2.20. Вызов метода

Почти все доступные вызовы метода являются опциональными и


следовательно синтаксис вызова не очень простой. Ниже представлено
несколько примеров:

— method;

— obj.method;

— Class::method;

— method(arg1, arg2);

— method(arg1, key1 => val1, key2 => val2, aval1, aval2) #{ блок };

— method(arg1, *[arg2, arg3]) соответствует: method(arg1, arg2, arg3).

Описание использованных элементов:

— invocation := [receiver ('::' | '.')] name [ parameters ] [ block ];

— parameters := ( [param]* [, hashlist] [*array] [&aProc] );

— block := { blockbody } | do blockbody end.

2.2.21. Создание класса

Имя класса всегда должно начинаться с большой латинской буквы:

class Identifier [< superclass ]


программный_код
end
# единичный класс (singleton), добавляет метод(ы) к экземпляру класса
class << obj
программный_код
end
30

2.2.22. Создание модуля

module Identifier
программный_код
end

2.2.23. Создание метода

def method_name(arg_list, *list_expr, &block_expr)


программный_код
end
# единичный метод
def expr.identifier(arg_list, *list_expr, &block_expr)
программный_код
end

Следует учитывать несколько особенностей:

— все элементы из списка аргументов, включая скобки –


необязательные;

— аргументы могут иметь значения по умолчанию (name=expr);

— method_name может быть символьным оператором;

— объявление метода не может быть вложенным в другой метод;

— методы могут переопределять операторы: .., |, ^, &, <=>, ==, ===,


=~, >, >=, <, <=, +, -, *, /, %, **, <<, >>, ~, +@, -@, [], []= (2
аргумента).

2.2.24. Ограничение доступа

Существуют следующие модификаторы доступа:

— public - полностью доступно.

— protected - доступно только внутри класса и внутри


непосредственных потомков.
31

— private - доступно только внутри класса.

Ограничение на чтение-запись атрибутов (начинаются с @) производится


посредством наличия/отсутствия одноименных методов.

По умолчанию класс не дает доступа к атрибутам своих объектов


(начинаются с @).

Могут использоваться как для явного указания имен методов так и для
разделения класса на "области доступа".

class A
protected
def protected_method
# ничего
end
end

class B < A
public
def test_protected
myA = A.new
myA.protected_method
end
end
b = B.new.test_protected

2.2.25. Методы доступа

Класс Module содержит следующие вспомогательные методы:

— attr_reader атрибут[, атрибут]... - создает одноименный метод чтения


значения атрибута;

— attr_writer атрибут[, атрибут]... - создает одноименный метод


изменения значения атрибута (т.е. атрибут=);

— attr атрибут[, разрешение_на_запись] - эквивалентно "attr_reader


атрибут; attr_writer атрибут if разрешение_на_запись";

— attr_accessor атрибут[, атрибут]... - эквивалентно "attr атрибут,


32

TRUE" для каждого аргумента.

2.2.26. Псевдонимы

alias старое_название, новое_название

Создает новое имя метода (новое_название) для старого


(старое_название). старое_название может быть любым существующим
методом или оператором, но не может быть локальной или внутренней
константой или именем класса

2.2.27. Блоки/замыкания

Блоками являются следующие конструкции:

— do ... end;
— { ... }.

Область видимости переменных объявленных внутри блока ограничена


блоком. Блок может получать аргументы при помощи ключевого слова yield
(при создании метода). Формы записи {} и do/end отличаются тем, что
конструкции do/end применяются преимущественно для циклов, а {} для всего
остального.

2.2.28. Лямбда-методы

Создаются одним из следующих способов:

— Kernel#proc;

— Proc#new;

— Вызов метода с аргументом &block.

2.2.29. Обработка исключений

begin
программный_код
33

[rescue [класс_ошибки [=> трассировка],..]


программный_код]
[else
программный_код]
[ensure
программный_код]
end

Следует обращать внимание на то, что аргументом по умолчанию для


rescue является StandardError, а не Exception.

2.2.30. Стандартная библиотека

Ruby поставляется с исчерпывающей библиотекой классов и модулей.


Некоторые из них встроенные, а некоторые поставляются в виде отдельных
файлов (в исходниках). При подключении библиотеки любого типа, разницы вы
не заметите.

2.2.31. Встроенные классы

Разработчику доступны следующие классы: Object, Hash, Symbol, IO, File,


Continuation, File::Stat, Data, NilClass, Exception, StandardError, LocalJumpError,
SystemStackError, ZeroDivisionError, RangeError, FloatDomainError, SecurityError,
ThreadError, IOError, EOFError, ArgumentError, IndexError, RuntimeError,
TypeError, SystemCallError, Errno::*, RegexpError, SignalException, Interrupt,
Fatal, NoMemoryError, ScriptError, LoadError, NameError, SyntaxError,
NotImplementedError, SystemExit, Array, Proc, String, Numeric, Float, Integer,
Bignum, Fixnum, Regexp, Thread, Module, Class, ThreadGroup, Method,
UnboundMethod, Struct, Struct::Tms, TrueClass, Time, Dir, Binding, Range,
MatchData, FalseClass.

2.2.32. Встроенные модули

Разработчику доступны следующие модули: Comparable, Enumerable,


Errno, FileTest, GC, Kernel, Marshal, Math, ObjectSpace, Precision, Process.
34

2.2.33. Поддержка сокетов

Поддержка сокетов обеспечивается следующими классами: BasicSocket,


IPSocket, TCPSocket, SOCKSSocket, TCPServer, UDPSocket, UNIXSocket, Socket.
35

ЗАКЛЮЧЕНИЕ
В результате прохождения преддипломной практики было
сформулировано задание для дипломного проектирования, установлены
требования к выполнению задания, а так же были определены и изучены
следующие технологии: HTTP, REST, MVC, Ruby on Rails, HTML, на основе
которых будет создаваться проект. Были освоены принципы создания web-
приложения на основе трехуровневой архитектуры MVC и архитектуры
сетевых протоколов REST. Обоснован выбор языка программирования, с
помощью которого будет создаваться система. Приведен обзор основ
выбранного языка программирования.
36

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ


1. Сообщество Wikipedia, HTTP, http://ru.wikipedia.org/wiki/HTTP, 2009
2. Сообщество Wikipedia, REST, http://ru.wikipedia.org/wiki/REST, 2009
3. Сообщество Wikipedia, MVC, http://ru.wikipedia.org/wiki/MVC, 2009
4. Сообщество Wikipedia, Ruby on Rails,
http://ru.wikipedia.org/wiki/Ruby_on_Rails, 2009
5. Д. Томас, Д. Х. Хэнссон, Гибкая разработка веб-приложений в среде Rails,
Питер, 2008