- •Лабораторная работа № 1 Основы системы программирования Ruby
- •Порядок выполнения работы
- •Содержание отчета
- •Варианты заданий
- •5 . Случайный спуск по дереву
- •6. Пересечение множеств
- •7. Удаление повторяющихся чисел
- •8. Проверка транзитивности
- •Лабораторная работа № 2 Разделение ресурсов
- •Порядок выполнения работы
- •Содержание отчета
- •Методические указания
- •Варианты задач Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Лабораторная работа № 3 Каркасы программных систем
- •Порядок выполнения работы
- •Содержание отчета
- •Пример программы на fxruby
Лабораторная работа № 3 Каркасы программных систем
Цель работы – приобретение навыков разработки оконных и Web интерфейсов, изучение паттерна Model-Controller-View.
Порядок выполнения работы
1. Для задания из лабораторной работы № 1 разработать оконное приложение на Ruby с возможностями:
- загрузки, редактирования и сохранения исходных данных;
- запуска требуемой реализации алгоритма;
- просмотра и сохранения результатов работы.
При разработке рекомендуется использовать библиотеку FXRuby (допустимо и другую, например WxRuby).
2. Разработать Web-приложение с использованием программного каркаса Rails. Приложение должно поддерживать все возможности оконного приложения.
3. Сравнить реализации по количеству строк кода, количеству действий в интерфейсе пользователя для достижения результата, удобству работы.
Требования к программному обеспечению
При разработке необходимо соблюдать принцип DRY (Don't Repeat Yourself), т.е. не повторять один и тот же код в разных частях программы. Web приложение должно содержать реализацию модели, представления и котроллера (Model-View-Controller). Причем класс модели должен быть общим для оконного и Web приложения. Модель должна содержать методы ввода и вывода в файлы. В интерфейсе пользователя каждый элемент вводимых данных (элемент матрицы, вектора и т.д.) должен быть представлен как отдельный элемент управления.
Содержание отчета
1. Постановка задачи
2. Диаграмма классов
3. Сравнение программных реализаций
4. Выводы
5. Приложения
5.1. Результаты тестирования
5.2. Листинги программ
Методические указания
Разработка на Rails
Приведенные команды выполняются из командной строки. Во время выполнения необходима связь с интернет.
Установка Rails:
gem install rails
Создание приложения simpletable:
rails simpletable
Настройка приложения для выполнения лабораторной работы (для Rails 2.0.2)
В файле \config\environment.rb:
Указать параметры конфигурации
Не использовать базу данных:
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
Выключить защиту от возможных атак на web-приложение:
config.action_controller.allow_forgery_protection = false
Запустить сервер WEBrick из командной строки
ruby script\server
В браузере набрать
http://localhost:3000
Создание контроллера из командной строки
ruby script\generate controller MyTable
Создать файл с моделью
app\models\my_table.rb
class MyTable
def load
s = File.open('1.txt','r').readlines
@d = Array.new(s.size) do |i|
a = s[i].split(' ')
a.each_index{ |j| a[j] = a[j].to_i }
a
end
end
def save
File.open('1.txt','w') do |f|
@d.each{ |r| f.puts r.join(' ') }
end
end
def get_table
@d
end
def set_table( t )
@d = t
end
def get_sum
s = 0
@d.each { |r| r.each{ |d| s+=d } }
s
end
end
Отредактировать файл контроллера:
app\controllers\my_table_controller.rb:
class MyTableController < ApplicationController
def index
@table = MyTable.new
@table.load
@t = @table.get_table
@s = @table.get_sum
end
def some_action
t = []
params['table'].each do |rnum, r|
s = []
r.each do |cnum, d|
s << d.to_i
end
t << s
end
table = MyTable.new
table.set_table(t)
table.save
redirect_to :action => 'index'
end
end
Создать файл представления
app\views\my_table\index.rhtml
<html>
<head>
<title>Table editor</title>
</head>
<body>
<h1>This is table</h1>
<form action="my_table/some_action" method="POST">
<% @t.each_with_index do |r,i| %>
<p>
<% r.each_with_index do |d,j| %>
<input name="table[<%= i %>][<%= j %>]" size=4 value="<%= d.to_s %>" />
<% end %>
</p>
<% end %>
<p>Summa=<%= @s %> </p>
<input type="submit" value="Ok" />
</form>
</body>
</html>
В браузере перейти по адресу
http://localhost:3000/my_table
