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

Опубликовано: 11.05.2024

Автор работы: Пользователь скрыл имя, 16 Ноября 2011 в 21:49, контрольная работа

Описание работы

Учет финансового состояния и анализ динамики развития предприятия, базирующиеся на учетной информации, в настоящие время являются основами процесса управления. В целях получения информации, необходимой для управления производственной и хозяйственной деятельностью, предприятие на базе современных информационных технологий создает систему автоматизированной обработки учетной информации – Бухгалтерскую информационную систему, или БУИС.

Содержание работы

Бухгалтерские информационные системы…………………………………3

Развитие рынка БУИС в России…………………………………………..10

Список используемой литературы………………………………………. 19

Файлы: 1 файл

ИТ в бух.doc

В этой связи появились комплексные бухгалтерские системы такие как «ABACUS», рассчитанный на бухгалтерию в 50 – 60 человек (фирма «Омега»); «Интегратор» (фирма «ИнфоСофт»); «БЭСТ» – для комплексной автоматизации предприятий (фирма «Интеллект Сервис»); «Парус – предприятие» – вариант для крупных и средних предприятий (корпорация «Парус»); «Суперменеджер» (фирма «Ланкс»); «Турбо Бухгалтер» (фирма «Диц») и другие.

Данный класс бухгалтерских систем, относится к универсальным системам, которые легко настраиваются на специфику ведения бухгалтерского учета на промышленном предприятии и могут работать как в сети, так и на отдельных рабочих местах учетных работников. Поэтому подобные системы занимают самый большой сектор на рынке финансово-экономического программного обеспечения. Такие БУИС представляют широчайшие возможности для ведения бухгалтерского учета на предприятии. Благодаря использованию различных современных информационных технологий, они обеспечивают возможность настройки на особенности любой бухгалтерии, как для малых предприятий, так и для корпоративных структур. Это достигается, например, за счет ведения плана счетов, изменения и добавления налоговых ставок, проводок, видов начислений и удержаний, размера минимальной заработной платы; ведение расширенного аналитического учета за счет добавления к отдельным балансовым счетам аналитических признаков. Глубину аналитического учета можно определить по структуре плана отчетов. Некоторые программы позволяют добавлять к счету объекты аналитического учета до десятого порядка в глубину; регистрацию хозяйственных операций несколькими способами. Наиболее часто встречаются два подхода при регистрации хозяйственных операций – «от проводки» и «от первичного документа». В первом случае, как правило, ведется один или несколько журналов хозяйственных операций, в которых регистрируются проводки. Во втором – ввод данных по любой хозяйственной операции осуществляется на основе заполнения первичных документов (приходных и расходных кассовых ордеров, платежных поручений, авансовых отчетов и других). Далее система автоматически формирует соответствующие проводки;

− несколько вариантов ввода информации, что облегчает и ускоряет процесс регистрации учетной информации:

− вручную с клавиатуры на основе первичного документа;

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

− на основе типовых операций посредством использования справочника типовых операций;

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

Одновременно при вводе информации создается первичный документ и формируются проводки в журнале хозяйственных операций;

− формирование любых отчетных первичных документов, и оперативных сводок, а также форм финансовой отчетности в любой момент времени и за любой период (от одного дня до года). Как правило, в любой системе предлагается набор стандартных форм (оборотно-сальдовая ведомость, журналы-ордера, главная книга и другие), а также ряд отчетных форм, которые бухгалтер может настраивать в соответствии с постоянно меняющимся законодательством (баланс предприятия, отчет о финансовых результатах, расчет НДС и другие). Использование встроенного текстового редактора или генератора отчетов позволяет создавать и корректировать любые бланки бухгалтерской отчетности, а также специфические для данного предприятия;

− формирование графических иллюстраций результатов финансово- хозяйственной деятельности посредством использования графического редактора;

− сбор информации обо всех этапах работы для контроля за деятельностью работников бухгалтерии. Для этого автоматически ведется журнал, в который заносятся данные о действиях пользователей системы;

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

− надежность и сохранность информации путем определения для каждого пользователя уровня доступа (администратор, главный бухгалтер, бухгалтер, работник склада и др.);

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

− введение многовалютного бухгалтерского учета;

− ведение учета на предприятиях розничной торговли, обеспечение связи системы с электронными кассовыми аппаратами.

Среди финансово-экономического программного обеспечения на российском рынке особое место занимают западные системы. Они демонстрируют комплексный подход к управлению финансами и бизнесом. Наиболее широко зарекомендовали себя программные комплексы для крупного бизнеса («Scala», «Sun System», «Platinum», «SAP», «Avalon», «Triton»).

Например, программный комплекс «Scala» используется для автоматизации учета в транснациональных корпорациях; «Sun System» – для ведения консолидированного учета зарубежных филиалов, «Platinum» позволяет выполнить разноску нескольких тысяч операций в минуту и может одновременно поддерживать работу до 200 пользователей.

Западные программные продукты относятся к классу комплексных бухгалтерских систем, в которых учет ведется в режиме реального времени. Они построены по модульному принципу. Основными модулями такой системы являются – Главная книга и Расширенный генератор отчетов (Premier Leoger and Frx); Банковская книга (Bank Book); Заказчики (Customers); Поставщики (Suppliers); Оформление заказов (Order Entry); Расчеты с заказчиками (Accounts Receivable); Склад (Inventory); Расчеты с Поставщиками (Purchase Order).

Настройка системы осуществляется путем задания связи каждого модуля с другими, начиная с «Главной книги». Такой принцип построения делает систему гибкой, позволяет расширять ее возможности без существенной переработки путем добавления других модулей, например, по учету основных средств, по учету расчетов по заработной плате, по учету затрат на производство и других. Основной причиной распространения западных программ на российском рынке явилась возможность ведения бухгалтерского учета в международных стандартах. Российские пакеты изначально создавались для российского рынка и не были предназначены для расширения своих функций до ведения западного варианта учета. Западные пакеты с момента выхода их поставщиков на российский рынок в начале 90-х годов сумели успешно перестроиться для удовлетворения требований российского учета. В своем большинстве они способны поддерживать два варианта учета – западный и российский, однако очень громоздки и сложны для изучения, а также очень дорогостоящи. Российские производители подобных систем мало известны широкой общественности. Наиболее известным сейчас является отечественный комплекс «Галактика» (фирма «Галактика»).

Дальнейшее развитие возможностей БУИС вызвано необходимостью аналитической обработки учетной информации, накапливаемой в этих системах и используемой менеджерами и руководителями в повседневной деятельности для принятия управленческих решений. Использование известных экономико-математических методов, методов математической статистики, соответствующих инструментальных средств программирования в условиях жесткой конкуренции на российском рынке привело к появлению финансово-аналитических программ, позволяющих вести анализ финансового состояния и результатов деятельности предприятия. К ним можно отнести такие программы, как – «Экспресс Анализ» (фирма «Телеком-Сервис»); «ФинЭксперт» (фирма «РосЭкспертиза»); «Альт-Финанс» (фирма «Альт»), «Audit Expert» (фирма «Pro-INVEST Consalting») и другие.

В целях удовлетворения сложившегося спроса на рынке финансово-экономического программного обеспечения данные программы возможно использовать как самостоятельно для оценки, управления и расширения бизнеса на предприятии, так и в комплексе с уже существующими БУИС в качестве приложения для них.

Например, для расширения функциональных возможностей программы «Парус» (для средних и крупных предприятий) целесообразно использовать программу «Audit Expert». Это позволяет кроме ведения бухгалтерского учета и формирования отчетов выполнять:

− переоценку баланса по данным детального описания структуры активов и пассивов предприятия, что значительно повышает достоверность результатов анализа финансовых отчетов;

− анализ прошлой деятельности и текущего финансового состояния предприятия.

При этом рассчитываются показатели ликвидности, устойчивости, рентабельности и деловой активности предприятия, а также ряд параметров, позволяющих проанализировать динамику изменения структуры баланса с различным шагом как в абсолютных величинах, так и в процентах;

− приведение финансовой отчетности к международному стандарту, что делает результаты анализа понятными как для российских, так и для иностранных экспертов.

В настоящее время создание современных БУИС ориентировано на интегрированность в отношении автоматизации бухгалтерского учета, анализа отчетности и планирования деятельности предприятия. Интегрированные БУИС – это многофункциональные системы для управлением предприятием. Необходимость создания таких систем очевидна сегодня уже для значительной части отечественных предприятий, как производственной, так и торговой сферы. Подобные системы должны обеспечивать решение всего комплекса задач по обработке учетной информации, от сбора и проверки корректности информации, поступающей в базу данных, ее обработки по соответствующим алгоритмам, до анализа данных. Причем от пользователя в таких системах не требуется специальных знаний в области баз данных, факторного анализа или методов оптимизации. Для создания интегрированных БУИС целесообразно использование компьютерной технологии «клиент-сервер». Установка мощных RISC-серверов или закупка СУБД, например, Oracle или SyBase требует немалых финансовых средств, привлечения высококвалифицированных специалистов, а также программной и аппаратной модернизации всей системы учета на предприятии, что сделает дорогостоящим такой проект. Разработка интегрированной БУИС для комплексного бухгалтерского учета, финансового анализа и планирования на предприятии с использованием приложений, построенных в архитектуре «клиент-сервер», имеет ряд преимуществ:

− Чрезвычайно низкие требования к производительности рабочих станций.

− Возможность распределить задачи по обработке данных среди нескольких серверов приложений.

− Незначительные требования по модернизации сети.

− Возможность дешевой и в то же время эффективной реализации удаленного доступа пользователей.

Использование локальных и глобальных вычислительных сетей, средств телекоммуникации определят особенности дальнейшего развития современных БУИС.

Список используемой литературы:

  1. Филимонова Е. В., Кириллова Н. А. 1С: Предприятие 7.7. Бухгалтерия и торговля в вопросах и ответах: учебно-практическое пособие. Р.на/Д., 2004.
  2. Голкина Г.Е., Бухгалтерские информационные системы (БУИС): Учебное пособие / Московский государственный университет экономики, статистики и информатики.– М., 2004. – 78 с.
  3. Корнюшин В.Ю., Бухгалтерские информационные системы: Учебный курс, МИЭМП, 2010.

2.9.2 (14 апреля 2012)

Первые версии языка созданы в 2003 году коллективом лаборатории методов программирования Федеральной политехнической школы Лозанны под руководством Мартина Одерского (англ. Martin Odersky ), язык реализован для платформ Java и .Net. По мнению Джеймса Стрэчена (англ. James Strachan (programmer) ), создателя языка программирования Groovy, Scala может стать преемником языка Java [2] .

Содержание

История

Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу при разработке языка были взяты 2 идеи:

  1. Язык программирования компонентного ПО должен быть масштабируемым в том смысле, что должна быть возможность с помощью одних и тех же концепций описать как маленькие, так и большие части. Поэтому внимание было сконцентрировано на механизмах абстракции, композиции и декомпозиции вместо введения большого количества примитивов, которые могут быть полезными только на каком-то одном уровне масштабирования.
  2. Масштабируемая поддержка компонентов может быть предоставлена языком программирования, унифицирующим и обобщающим объектно-ориентированное и функциональное программирование. Некоторые из основных технических новшеств Scala — это концепции, представляющие собой сплав этих парадигм программирования. В статически типизированных языках, к которым относится Scala, эти парадигмы до сих пор были почти полностью разделены.

Scala была выпущена для общего пользования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года. Планируется продолжить работу над формализацией ключевых аспектов языка и над разработкой оптимизаций, выполняемых компилятором.

Истоки дизайна

На дизайн Scala оказали влияние многие языки и исследовательские работы. Следующее перечисление включает часть работ.

Ключевые аспекты языка

  • Scala-программы во многом похожи на Java-программы, и могут свободно взаимодействовать с Java-кодом.
  • Scala включает единообразную объектную модель — в том смысле, что любое значение является объектом, а любая операция — вызовом метода.
  • Scala — это также функциональный язык в том смысле, что функции — это полноправные значения.
  • В Scala включены мощные и единообразные концепции абстракций как для типов, так и для значений.
  • Она содержит гибкие симметричные конструкции примесей для композиции классов и trait-ов.
  • Она позволяет производить декомпозицию объектов путем сравнения с образцом.
  • Образцы и выражения были обобщены для поддержки естественной обработки XML-документов.
  • В целом, эти конструкции позволяют легко выражать самостоятельные компоненты, использующие библиотеки Scala, не пользуясь специальными языковыми конструкциями.
  • Scala допускает внешние расширения компонентов с использованием видов (views)
  • Есть поддержка структурных и экзистенциальных типов.
  • На текущий момент Scala реализована на платформахJava и .NET.

Объектно-ориентированный язык

В Scala используется чистая объектно-ориентированная модель, похожая на применяемую в Smalltalk: каждое значение — это объект, и каждая операция — это отправка сообщения. Например, сложение x+y интерпретируется как x.+(y), то есть как вызов метода + с аргументом x в качестве объекта-приёмника и y в качестве аргумента метода. Рассмотрим другой пример: 1+2. Это выражение интерпретируется как (1).+(2).Обратите внимание, что скобки вокруг чисел обязательны, потому что лексический анализатор Scala разбивает выражение на лексемы по принципу самого длинного возможного сопоставления. Таким образом, выражение 1.+(2) разобьется на лексемы 1.,+ и 2, потому что лексема 1. длиннее лексемы 1 и первый аргумент сложения будет интерпретирован, как тип Double вместо Int. [3]

Функциональный язык

Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и карринговых функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно расширяется к обработке XML c помощью регулярных выражений.

Повторное использование и адаптация

Каждая компонентная система с мощными конструкциями абстракции и композиции сталкивается с проблемой, когда дело доходит до интеграции подсистем, разработанных различными командами в разное время. Проблема состоит в том, что интерфейс компонентов, разработанных той или иной группой, часто не подходит клиентам, намеренным использовать этот компонент.

Scala представляет новую концепцию решения проблемы внешней расширяемости — виды (views). Они позволяют расширять класс новыми членами и trait-ами. Виды в Scala переводят в объектно-ориентированное представление используемые в Haskell классы типов. В отличие от классов типов, область видимости видов можно контролировать, причем в разных частях программы могут сосуществовать параллельные виды.

.Net и JVM

.Net и JVM во многом схожи — в том, что они оба поддерживают одиночное наследование классов, множественную реализацию интерфейсов, самоописываемые типы, ленивую загрузку типов. Хотя Scala и разрабатывалась с оглядкой на Java, ставилась также задача поддержки всех возможностей .NET.

Примеры программ

Программа, как и в Java, представляет собой объект. Это пример консольной программы, которая выводит строчку текста на экран.

Следующий простой пример программы написан на Java и Scala, демонстрирующий некоторые различия в синтаксисе (постфиксная запись типов переменных, отсутствие специального синтаксиса для доступа к массивам). В этом примере описывается консольная программа, которая выводит все опции, переданные через командную строку. Опции начинаются с символа «-» (минус).

Обратите внимание, что в Scala объявляется не класс объекта, а сразу экземпляр объекта. Так естественным способом реализуется шаблон проектирования, где в программе должен быть только один экземпляр класса («Одиночка» — «Singleton»).

Пример программы, которая суммирует все элементы списка, который передаётся через аргументы.

С помощью метода map перебираются все аргументы. Все они преобразовываются в целое число методом Integer.parseInt и добавляются в список (массив) elems . Затем с помощью метода свёртки списка foldRight вычисляется сумма элементов.

Интеграция с Java

Scala может взаимодействовать с кодом, написанным на Java. Все классы из пакета java.lang уже импортированы по умолчанию, в то же время другие должны быть импортированы явно.

Пример

Задача: получить и отформатировать текущую дату в локализации определённой страны, например — Франции.

В библиотеке классов Java уже есть требующаяся нам функциональность в классах Date и DateFormat . Для того, чтобы воспользоваться этим, достаточно просто импортировать эти классы из соответствующих Java-пакетов:

Обложка: Основы функционального программирования с примерами на Scala — часть 1

Большинство приложений в мире написано в традициях ООП (объектно-ориентированного программирования) и использует императивный код. Несмотря на то, что объектно-ориентированный подход очень популярен и прост для понимания, он не лишён своих недостатков.

Недостатки ООП

Во-первых, в большинстве языков высокого уровня обработка ошибок реализована с помощью механизма исключений. Идея о том, что выполнение кода нужно прерывать, как только достигнуто некорректное состояние, хороша, но её реализация в виде выброса исключения и перехвата его в другом месте требует от коллектива программистов железной дисциплины. Иначе простая линейная цепочка вычислений превратится в древообразную, а то и в запутанный граф. Функциональная парадигма предоставляет абстракции для простой и прозрачной обработки ошибок.

Во-вторых, императивный код подобен тому, как человек представляет себе порядок каких-то действий. Такой подход очень хорош для описания последовательных вычислений, однако в современном мире большинство приложений асинхронные и многопоточные, и здесь уследить за взаимодействием императивного кода, выполняющегося во многих потоках, очень сложно. Наверное, каждый программист сталкивался с ситуациями, когда два потока пытаются изменить одно и то же значение, или же когда один поток ждёт другой поток, а тот, в свою очередь, ждёт первый?

В-третьих, не существует математически строгой, аксиоматизированной и пригодной к повседневному применению теории, описывающей паттерны проектирования и систему типов. Паттерны проектирования — это, конечно, большой шаг в сторону стандартизации способов проектирования, но и они — скорее сборник советов и указаний, нежели строгая теория. Исходя из этого, комбинируя паттерны, вы никогда с полной уверенностью не будете знать, что получите в итоге, если вы не делали этого ранее, что, в свою очередь, ведёт к разного рода «неожиданностям» при разработке.

Функциональный подход

В функциональном программировании решили подойти с другой стороны. Во-первых, решили отказаться от возможности изменять переменные настолько, насколько это возможно (существуют фундаментальные ограничения, не позволяющие сделать это полностью). Функция в смысле информатики не является функцией в смысле математики: например, функция датчика случайных чисел (на основе физического датчика) не является математической функцией — она не принимает параметров, и потому, с точки зрения математики, должна быть константой, но каждый раз эта функция выдаёт разный результат. Такого в математике не бывает. Если же мы запретим переменным изменяться, то есть уничтожим глобальное изменяемое состояние, то функции станут действительно математическими, и можно будет построить строгую математическую теорию. Такая теория была построена и ныне носит название λ-исчисления. Эта теория описывает типы и полиморфизм.

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

Монады бывают двух видов. Первый вид — «чистая» монада, она представляет корректные данные. Второй вид — некорректная монада, она нужна для представления некорректных данных. Над этими двумя типами данных определены операции:

  1. pure — функция создания «чистой» монады.
  2. flatMap — применение преобразования, которое может привести к некорректному результату. К примеру, операция деления целых чисел будет корректно обрабатывать все данные, кроме деления на 0. В этом случае будет создана некорректная монада и применение к ней операции flatMap её не изменит.
  3. map — применение к данным операции, которая не может вызвать исключений по своей природе, например, операции сложения.

Важно понимать, что функциональное программирование занимает нишу в середине между низкоуровневыми операциями и очень высокими уровнями абстракции — например, такими, как уровень сервисов или приложений. Исходя из этого был создан объектно-функциональный стиль, позволяющий использовать императивный код для низкоуровневых функций, чистый функциональный код в середине приложения и паттерны проектирования и прочие ООП-технологии на наивысшем уровне абстракции. Таким образом, функциональный подход лучше применять не для создания замкнутых систем, а скорее для слоёв приложений и описания бизнес-логики. Именно в таком ключе функциональное программирование и применяется на сегодняшний день — построенное над низкоуровневым императивным кодом, внутри объектных абстракций.

Для того чтобы приводить жизненные примеры и показывать, зачем нужна та или иная функциональная конструкция, начнём с краткого, но довольно исчерпывающего введения в мультипарадигменный язык программирования с сильной поддержкой функционального подхода — Scala.

В этой статье будут описаны фундаментальные языковые конструкции и некоторые средства сокращения кода.

О Scala

Изначально язык Scala был разработан Мартином Одерски (который также работал над Generics в Java и над компилятором Javac) в EPFL. Первая версия языка была выпущена в мир в 2004 году на платформе Java. Нынешняя версия языка (2-я) имеет версии для платформ JavaScript (Scala-js) и под LLVM (Scala Native).

Изначально многие решения, реализованные в этом языке, были направлены на устранение недостатков языка Java, таких как слабая типобезопасность и отсутствие синтаксического сахара. Притом новый язык сохранил возможность практически бесшовной интеграции с Java — вы можете использовать все библиотеки, написанные на Java, без падения производительности.

Язык был оценен по достоинству крупными корпорациями: например, он активно используется в Twitter, LinkedIn, Netflix, Sony и других.

Установка IDE и SBT

Чтобы использовать Scala под платформу Java, вам понадобятся установленные JRE и JDK. Для знакомства с языком разумно использовать IDE IntelliJ IDEA Community Edition со специальным плагином Scala Plugin (доступен прямо при установке IDE) и систему построения проектов SBT (есть под большинство ОС, скачивается при создании проекта).

Примеры из статьи можно запускать, используя онлайн-компилятор Scalastie.

Для того чтобы создать ваш первый проект, нужно сделать следующее:

new project → scala → sbt

scala

В меню создания проекта нужно выбрать версию SBT и Scala, последними на момент написания статьи являются 1.2.1 и 2.12.6 соответственно.

После нажатия кнопки создания проекта IDEA отдаст указание о создании проекта SBT (это можно понять по надписи dump project structure from SBT), поэтому структура папок проекта появится не сразу.

После формирования проекта вы можете увидеть подобную структуру папок:

scala

Нас в основном будут интересовать папка src и её подпапки main/scala и test/scala, а также файл build.sbt. Файл build.sbt описывает всю структуру проекта и используется для определения модулей, подмодулей, управления зависимостями и версиями библиотек. Сюда же стоит дописывать импорты сторонних библиотек.

В папке main/scala нужно создать new scala class и выбрать там object (о том, что это такое и какую роль он играет в Scala, будет сказано ниже). Обратите внимание, что имя обджекта должно совпадать с именем файла, в котором он расположен, иначе вы можете столкнуться с ошибками при попытке запустить вашу первую программу.

После создания обджекта вы увидите следующий код:

В теле обджекта нужно создать точку входа в программу, а именно метод main() (в Scala методы объявляются ключевым словом def ), автодополнение IDEA предложит вам сгенерировать метод как только вы начнёте набирать def main . В итоге должен получиться такой код:

Если же вам не нужны параметры командной строки args , вы можете сократить свой код до:

Отметим несколько отличительных особенностей: во-первых, в списке параметров сначала идут имена параметров, а потом их типы после двоеточия, во-вторых, тип возвращаемого значения указывается через двоеточие после списка параметров (в Scala все функции всегда возвращают значение, но когда необходимости в этом нет, используется тип Unit — это аналог ключевого слова void , указывающий на отсутствие какого-либо возвращаемого значения).

Добавив строчку println("Hello world") , вы сможете запустить эту программу, нажав на зелёный треугольник напротив метода main . Если всё сделано правильно, в консоли должна появиться строка «Hello world».

Мы настоятельно рекомендуем всем любителям чистых текстовых редакторов на этапе знакомства с языком пользоваться IDEA (пусть это и противоречит философии Unix). Scala содержит большое количество достаточно хитрых конструкций, поддержку которых редко когда можно встретить в редакторе. Кроме того, у IDEA есть много полезных языко-специфических функций. С их помощью IDEA может спасти вас от некоторых глупых ошибок ещё во время написания кода.

Переменные

В языке Scala есть 2 типа переменных — val и var .

val — это неизменяемая переменная, ей можно присвоить значение только при инициализации. Синтаксис введения постоянной выглядит так:

val valueName: TypeName = value

Опять же, как и у параметров функции, имя постоянной находится сначала, а имя типа — после двоеточия, за именем постоянной. В Scala существует продвинутая система типов, поэтому в большинстве случаев вы можете опускать имя типа, компилятор выведет его за вас (IDEA тоже это умеет, поставьте курсор на имя переменной и нажмите Ctrl+Q).

Для того чтобы объявить переменную, вам нужно использовать ключевое слово var :

var valueName: TypeName = value

Как и в случае постоянной, тип в большинстве случаев можно опускать.

Переменные можно объединять в кортежи при помощи удобного синтаксиса запаковки в кортеж:

val tuple: (Type1, Type2, . , TypeN) = (val1, val2, … , valN )

И распаковки из кортежа:

val (val1: Type1, … valN: TypeN) = tuple

Здесь типы тоже можно опускать, сокращая код до:

val tuple = (val1, val2, … , valN )
val (val1, … val2) = tuple

Методы

Для определения методов используется ключевое слово def . Синтаксис для определения метода выглядит так:

В определении вы наверняка не увидели слово return . Это потому, что последнее значение в функции является возвращаемым. То же самое касается и оператора if : вопреки принятой в императивных языках логике, оператор if (condition) value_if_true else value_if_false имеет возвращаемое значение, имеющее тип, общий над value_if_true / value_if_false и значение, в зависимости от условия равное value_if_true / value_if_false .

В функциях не обошлось без синтаксического сахара. Если функция не принимает параметров, то вы можете не писать скобки. Кроме того, можно не указывать тип возвращаемого значения. Как и в случае с переменными, тип будет выведен (в IDEA этот тип будет напечатан фантомным текстом). Ещё одна «сахарная» особенность — если тело метода достаточно короткое и содержит всего лишь одну инструкцию, вы можете не писать фигурных скобок. Например, такой код будет абсолютно корректен:

Хотелось бы отметить, что функция может быть значением и при этом будет иметь функциональный тип, который записывается как SourceType => ResultType .

К примеру, функция, которая увеличивает число на 1 (здесь num + 1 — возвращаемое значение, а Int — его тип):

def inc (num: Int) = num +1

будет иметь тип Int => Int .

Тогда мы можем ввести постоянные, значениями которых будут наши функции:

val incFunc: Int=>Int = inc

В чём же разница между val и def ? Дело в том, что значение val вычисляется однажды и дальше используется при каждом упоминании, а значение типа def вычисляется каждый раз при упоминании. Проверить это можно следующим фрагментом кода:

Первые две строчки вывода будут совпадать, а вторые две — различаться.

Если же у функции много входных параметров, тип можно записать так:

(Type1, Type2, … TypeN) => ResultType

К примеру, функция сложения двух чисел:

def add(a: Int, b: Int) = a+b

будет иметь тип: (Int, Int) => Int .

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

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

value вполне может быть блоком, в котором вы можете вводить дополнительные переменные и совершать некоторые действия. Примеры:

Поскольку для функций существует тип, мы можем создавать функции от функций, то есть функции высшего порядка. Для этого достаточно просто дописать параметру функциональный тип. К примеру, можно написать функцию, которая к двум числам применяет заданное преобразование:

def transform (a: Int, b: Int, f: (int, Int) => Int): Int = f(a,b)

Есть ещё один нюанс, связанный с функциями. Существует 2 семантики передачи параметров: call by name и call by value. Call by value используется по умолчанию: значение сначала вычисляется, а потом передаётся в функцию. Call by name, наоборот, сначала передаётся в функцию, а потом вычисляется в каждом месте упоминания. Для указания этой семантики перед типом ставится знак => . Продемонстрировать это можно следующим примером:

Вы должны получить следующий вывод: 1 1 1 2 3 4 . Таким образом, если вы хотите передать в функцию генератор случайных чисел, вы должны использовать семантику callByName.

Заключение

Мы познакомились с основами языка программирования Scala: рассмотрели, как настроить окружение, как вводить переменные, функции. Мы также рассмотрели два вида семантики методов — callByName и callByValue.

В следующей статье мы рассмотрим объектную модель языка Scala и некоторые особенности, связанные с синтаксическим сахаром.

Scala,Inc .- производитель мультимедийного ПО, возможности мультимедийных программных платформ компании используются тысячами цифровых лейблов во всём мире, включая такие известные бренды как Rabobank, IKEA, Bloomberg Television, Burger King, T-Mobile, Virgin Megastores, Disneyland Resort Paris, McDonald's, Warner Bros., Shell, Esso, Ericsson, The Life Channel и другие.


Scala позиционируется как студия управления сетями Digital Signage и используется различными компаниями в розничной продаже, аэропортах, здравоохранении, образовании, производстве и везде, где требуется создание, управление и распределение электронных сообщений для показов рекламы или информации, которая может быть интерактивной и использовать различные формы визуализации на мультимедийных устройствах.

Компоненты программного обеспечения Scala

Scala содержит в себе 3 основных компонента:

Scala Designer

- поддержка широкого диапазона форматов изображений, видео, флеш анимации и звука;

- использование множества визуальных эффектов и переходов (появление, исчезновение и т.д.), большая библиотека клипартов, стоковых изображений, шаблонов, фоновых изображений и видео;

- предоставление обширных возможностей для создания и настройки бегущих строк, содержащих статические или динамические данные;


Scala Content Manager

- создание динамических списков воспроизведения с использованием скриптов , поддержка текстовых сообщений, видео, флеш анимации, статических изображений с помощью простого в использовании веб-интерфейса;

- возможность поддержки неограниченного количества медиаплееров;

- гибкие возможности планирования, разрешения ролей , основанных на пользовательских функциях и мониторинг состояния устройств воспроизведения существенно облегчают процесс управления сетью;

Схема работы Scala Content manager


Таблица описания терминов

Термин

Описание

Объект изображения, видео, scala скриптов, HTML5 графических фрагментов и т.д, может быть размещено непосредственно в Списке файлов для воспроизведения.

Содержимое - все вышеперечисленные элементы, но только Сообщения и Медиа могут быть назначены Списку файлов для воспроизведения.

Коллекция Содержимого с описанием для определения порядка воспроизведения. Плейлист может включать в себя Расписание воспроизведения и ссылки на другие Плейлисты.

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

Элемент канала. Каждый фрейм имеет одно или несколько Расписаний назначенных ему, а также свой Плейлист.

Канал может быть разбит на несколько Фреймов (или иметь один полноэкранный фрейм), каждый из которых имеет собственный поток воспроизведения Содержимого.

Устройство воспроизведения Содержимого. Каждый проигрыватель настраивается на определенный Канал.

Scala Player

Преимущества использования программного обеспечения:

- полностью настраиваемое ПО для DIGITAL SIGNAGE;

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

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

- интерактивная, персонализированная, оперативная передача сообщений в нужное время и нужное место даже одному зрителю;

- увеличение объема продаж за счет использования “перекрестных продаж” (продажи сопутствующих товаров) и использования “увеличения стоимости товара” (продажа аналогичного, но более дорогого товара с расширенными характеристиками) при использовании решений Scala Digital Signage;

2.9.2 (14 апреля 2012)

Первые версии языка созданы в 2003 году коллективом лаборатории методов программирования Федеральной политехнической школы Лозанны под руководством Мартина Одерского (англ. Martin Odersky ), язык реализован для платформ Java и .Net. По мнению Джеймса Стрэчена (англ. James Strachan (programmer) ), создателя языка программирования Groovy, Scala может стать преемником языка Java [2] .

Содержание

История

Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу при разработке языка были взяты 2 идеи:

  1. Язык программирования компонентного ПО должен быть масштабируемым в том смысле, что должна быть возможность с помощью одних и тех же концепций описать как маленькие, так и большие части. Поэтому внимание было сконцентрировано на механизмах абстракции, композиции и декомпозиции вместо введения большого количества примитивов, которые могут быть полезными только на каком-то одном уровне масштабирования.
  2. Масштабируемая поддержка компонентов может быть предоставлена языком программирования, унифицирующим и обобщающим объектно-ориентированное и функциональное программирование. Некоторые из основных технических новшеств Scala — это концепции, представляющие собой сплав этих парадигм программирования. В статически типизированных языках, к которым относится Scala, эти парадигмы до сих пор были почти полностью разделены.

Scala была выпущена для общего пользования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года. Планируется продолжить работу над формализацией ключевых аспектов языка и над разработкой оптимизаций, выполняемых компилятором.

Истоки дизайна

На дизайн Scala оказали влияние многие языки и исследовательские работы. Следующее перечисление включает часть работ.

Ключевые аспекты языка

  • Scala-программы во многом похожи на Java-программы, и могут свободно взаимодействовать с Java-кодом.
  • Scala включает единообразную объектную модель — в том смысле, что любое значение является объектом, а любая операция — вызовом метода.
  • Scala — это также функциональный язык в том смысле, что функции — это полноправные значения.
  • В Scala включены мощные и единообразные концепции абстракций как для типов, так и для значений.
  • Она содержит гибкие симметричные конструкции примесей для композиции классов и trait-ов.
  • Она позволяет производить декомпозицию объектов путем сравнения с образцом.
  • Образцы и выражения были обобщены для поддержки естественной обработки XML-документов.
  • В целом, эти конструкции позволяют легко выражать самостоятельные компоненты, использующие библиотеки Scala, не пользуясь специальными языковыми конструкциями.
  • Scala допускает внешние расширения компонентов с использованием видов (views)
  • Есть поддержка структурных и экзистенциальных типов.
  • На текущий момент Scala реализована на платформахJava и .NET.

Объектно-ориентированный язык

В Scala используется чистая объектно-ориентированная модель, похожая на применяемую в Smalltalk: каждое значение — это объект, и каждая операция — это отправка сообщения. Например, сложение x+y интерпретируется как x.+(y), то есть как вызов метода + с аргументом x в качестве объекта-приёмника и y в качестве аргумента метода. Рассмотрим другой пример: 1+2. Это выражение интерпретируется как (1).+(2).Обратите внимание, что скобки вокруг чисел обязательны, потому что лексический анализатор Scala разбивает выражение на лексемы по принципу самого длинного возможного сопоставления. Таким образом, выражение 1.+(2) разобьется на лексемы 1.,+ и 2, потому что лексема 1. длиннее лексемы 1 и первый аргумент сложения будет интерпретирован, как тип Double вместо Int. [3]

Функциональный язык

Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и карринговых функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно расширяется к обработке XML c помощью регулярных выражений.

Повторное использование и адаптация

Каждая компонентная система с мощными конструкциями абстракции и композиции сталкивается с проблемой, когда дело доходит до интеграции подсистем, разработанных различными командами в разное время. Проблема состоит в том, что интерфейс компонентов, разработанных той или иной группой, часто не подходит клиентам, намеренным использовать этот компонент.

Scala представляет новую концепцию решения проблемы внешней расширяемости — виды (views). Они позволяют расширять класс новыми членами и trait-ами. Виды в Scala переводят в объектно-ориентированное представление используемые в Haskell классы типов. В отличие от классов типов, область видимости видов можно контролировать, причем в разных частях программы могут сосуществовать параллельные виды.

.Net и JVM

.Net и JVM во многом схожи — в том, что они оба поддерживают одиночное наследование классов, множественную реализацию интерфейсов, самоописываемые типы, ленивую загрузку типов. Хотя Scala и разрабатывалась с оглядкой на Java, ставилась также задача поддержки всех возможностей .NET.

Примеры программ

Программа, как и в Java, представляет собой объект. Это пример консольной программы, которая выводит строчку текста на экран.

Следующий простой пример программы написан на Java и Scala, демонстрирующий некоторые различия в синтаксисе (постфиксная запись типов переменных, отсутствие специального синтаксиса для доступа к массивам). В этом примере описывается консольная программа, которая выводит все опции, переданные через командную строку. Опции начинаются с символа «-» (минус).

Обратите внимание, что в Scala объявляется не класс объекта, а сразу экземпляр объекта. Так естественным способом реализуется шаблон проектирования, где в программе должен быть только один экземпляр класса («Одиночка» — «Singleton»).

Пример программы, которая суммирует все элементы списка, который передаётся через аргументы.

С помощью метода map перебираются все аргументы. Все они преобразовываются в целое число методом Integer.parseInt и добавляются в список (массив) elems . Затем с помощью метода свёртки списка foldRight вычисляется сумма элементов.

Интеграция с Java

Scala может взаимодействовать с кодом, написанным на Java. Все классы из пакета java.lang уже импортированы по умолчанию, в то же время другие должны быть импортированы явно.

Пример

Задача: получить и отформатировать текущую дату в локализации определённой страны, например — Франции.

В библиотеке классов Java уже есть требующаяся нам функциональность в классах Date и DateFormat . Для того, чтобы воспользоваться этим, достаточно просто импортировать эти классы из соответствующих Java-пакетов:

Читайте также: