Исключения являются удобным методом обработки ошибок, но в данном коде оно используется немного некорректно. Приведу несколько примеров:

Размер: px
Начинать показ со страницы:

Download "Исключения являются удобным методом обработки ошибок, но в данном коде оно используется немного некорректно. Приведу несколько примеров:"

Транскрипт

1 Цели: Использование исключений для указания ошибки в действиях Устранение обёрток в бинах Устранение пустых коллекций Использование исключений для указания ошибки в действиях Исходный код Исключения являются удобным методом обработки ошибок, но в данном коде оно используется немного некорректно. Приведу несколько примеров: private List getallobjects(class clazz) { synchronized (eminvoker) { try { if (eminvoker == null) { return null; // end if List<String> allids = eminvoker.getids(clazz); return (eminvoker.get(clazz, allids)); // end try catch (Exception je) { LOG.error("emInvoker.getIds", je); return null; // end catch // end synchronized // end getallobjects() Благодаря этому коду, при выполнении программы мы никогда не узнаем, что что-то пошло не так. Можно конечно просмотреть логи, но кто будет делать это по доброй воле на периодической основе?

2 public ValidationDocumentResult commitdocument(string documentid) throws DocumentException, ValidationProcessingException { try { synchronized (drafthelper) { EMDraft emdraft = drafthelper.getemdraft(documentid); Document document = convertemdrafttodocument(emdraft);...пропущено 60 строк кода... return ret; catch (Exception exception) { LOG.error("commitDocument: ошибка при коммите документа",exception); throw new DocumentException(exception); Обрамление большого куска кода в одно большое исключение. При выполнении подобного кода Java машина вставляет специальные метки в каждый вызов метода, в рамках данного блока. После возврата из метода этот блок кода проверяет не было ли контролируемого исключения. И чем больше блок и больше вызовов методов тем более медленнее выполняется код. Хотя данный код не выполняется очень часто и данный аспект не играет большой роли. Но с другой стороны разве кто-то так сильно не уверен в своём коде выставляя такой большой блок try-catch? public EMDraft getemdraft(string draftid)throws DocumentException{ EMDraft ret = null; EMDocument emdoc = null; try{ ret = (EMDraft)getObject(EMDraft.class, draftid); catch(exception e){e.printstacktrace();

3 черновиках"); черновиках"); if(ret==null){ try{ emdoc = (EMDocument)getObject(EMDocument.class, draftid); catch(exception e){e.printstacktrace(); if(emdoc==null) try{ throw new DocumentException("Неизвестный идентификатор id = " + draftid); ret = (EMDraft)getObject(EMDraft.class, emdoc.getdraftid()); if(ret==null) throw new DocumentException("Документ с идентификатором id = " + draftid + " не находится в ret.setnewdocument(false); catch(exception e){ return ret; if(ret==null) throw new DocumentException("Документ с идентификатором id = " + draftid + " не находится в Данный кусок кода больше касается понятности кода, чем работе с исключениями но именно с помощью них он был сделан ОЧЕНЬ непонятным. Результаты рефакторинга Метод «getallobjects» успешно перекочевал в интерфейс-обёртку для нашего модуля хранения EntityManager. И был переделан как метод, который принимает специальный слушатель и имя класса, все экземпляры которого мы хотим получить. Листенер, в свою очередь, получает все объекты раз за разом маленькими порциями благодаря этому (в случае большого кол-ва объектов) не будет опасности в передаче СЛИШКОМ большого объёма данных через веб-сервис (основной протокол передачи данных для EntityManager'а). public ValidationDocumentResult commitdocument(string draftid) throws DocumentException,

4 ValidationProcessingException, NoSuchObjectException { Date now = new Date(); DocumentDraft draft = draftmanager.get(draftid); ValidationDocumentResult validationresult = validationcomponent.validatedraft(draft); if (!validationresult.successful) return validationresult; // если ранее документа не было - создать новый if (null == draft.getdocumentid()) { Document document = new Document(); document.setid(null); document.setdatecreated(now); document = documentmanager.insert(now, document); documentmanager.commit(now, document, draft); validationresult.objectid = document.getid(); // если ранее документ был - обновить else { Document document = documentmanager.get(draft.getdocumentid()); documentmanager.commit(now, document, draft); validationresult.objectid = document.getid(); draftmanager.remove(draftid); String message = String.format("Документ с идентификатором '%s' успешно закоммичен.", validationresult.objectid); log.info(message); return validationresult;

5 Как видите метод получился в 2 раза меньше, чем блок кода, который пришлось опустить. Плюс метод выбрасывает исключения, которые выбрасываются, используемыми интерфейсами т.е. нет никаких try-catch блоков в коде, который могут замедлить работу. Правило: не можете как-то обработать исключение выбрасывайте наверх Его даже не надо записывать оно само попадёт в журнал вызвавшей вас системы. А так будет лишь дублирование в логах. Код теперь использует лишь бины и интерфейсы как следствие легко тестируем. Метод «getemdraft» преобразовался в метод «get» интерфейса IdraftManager, вот его реализация в реализации интерфейса: public DocumentDraft get(string draftid) throws NoSuchObjectException { EMDocumentDraft emdraft = entitymanager.get(emdocumentdraft.class, draftid); if (null == emdraft) throw new NoSuchObjectException(draftId, ObjectTypes.DRAFT); return ConvertCopyFactory.convert(emDraft); Метод прост, мал и как следствие лёгок для понимания и тестирования. Добиться такого удалось не только за счёт рефакторига кода но и за счёт рефакторинга объектной модули принципов того, как хранятся разные сущности в системе. Это было неотъемлимой частью основного рефакторинга (а может и было основной). Правило: методы должны быть как можно меньше и проще. И главное должны иметь говорящее название. Совет: встроенные средства рефакторинга Вашей системы очень сильно могут помочь в выделении методов. Например в eclipse достаточно выделить повторяющийся кусок кода и в меню «Refactoring» выбрать «Extract method...». Устранение обёрток в бинах Исходный код Рассмотрим оригинальный бин хранения.

6 public class EMAttribute { public String id; private Date datecreated = null; private Date datelastmodified = null; private Boolean active; private String recordnamevalue = null; private String filevalue = null; private String name = null; private Boolean obligatory = null; private String type = null; Обёртки (Boolean, Float, Long) позволяют обходится с примитивными типами как с объетами, за счёт побочного эффекта они могут быть неопределены (быть null). За счёт этого и появляется код подобный найденному в одной из утилит для сравнения бинов: public static boolean isequals(boolean b1, Boolean b2) { boolean ret = false; try { if (b1 == null && b2!= null) { return false; // end if if (b1!= null && b2 == null) { return false; // end if if (b1 == null && b2 == null) { return true; // end if if (istrue(b1) && istrue(b2)) { return true; // end if else {

7 return false; // end else // end try catch (Exception exception) { LOG.debug("TODO: comment it", exception); return ret; // end catch // end isequals() public static boolean istrue(boolean b) { if (b == null) return false; if (b.booleanvalue()) return true; return false; Рефакторинг После переделки обёрток в примитивы для бинов хранения, потребность в методах типа «istrue» и «isequals» отпала и их можно было удалить. Устранение пустых коллекций Исходный код

8 List<EMDocument> list = (List<EMDocument>) getallobjects(emdocument.class); if (list == null list.size() == 0) { return ret; // end if Проверка на пустую коллекцию ret.setactive(new Boolean(false)); eminvoker.update(ret); if (ret.getattributes()!= null) for (EMAttribute at : ret.getattributes()) { if (at.gettype().equalsignorecase("file")) { filemap.removedocumentid(at.getfilevalue()); Ещё одна проверка на пустую коллекцию... try{ emdraft = (EMDraft)getObject(EMDraft.class, documentid); if(emdraft==null){ EMDocument emdoc = (EMDocument)getObject(EMDocument.class, documentid); emdraft = (EMDraft)getObject(EMDraft.class, emdoc.getdraftid()); List<EMAttribute> attributes = emdraft.getattributes(); if(attributes==null) attributes = new ArrayList<EMAttribute>(0); attributes.add(ema); emdraft.setattributes(attributes); eminvoker.update(emdraft); catch(exception e){ e.printstacktrace();

9 И ещё одна проверка... Все эти проверки лишь «замусоривают» программу и отвлекаю от реальной логики методов. Рефакторинг Во-первых избавляемся от java.util.list он хоть и интерфейс, но он несёт больше возможностей, чем фактически используется. В отличии от Collection, List позволяет получить элементы по индексу, поместить из в любое место, взять диапазон но обычное действие для результата метода это обычный цикл for (который принимает Collection). Используя ненужную «высоту» интерфейса Вы ограничиваете себя в возможных результатах методов- например Set или Vector не послать. Как результат все методы возвращают коллекцию. Например каждый метод, вначале создаёт переменную «result», в которую добавляются все найденные или вычисленные элементы либо это будет пустой список, но никогда null. public Collection<DocumentType> getall(boolean withdeleted) { Collection<DocumentType> result = new ArrayList<DocumentType>(); Либо явно возвращаем пустой лист (в самом конце метода): protected Collection<EMDocumentTypeHistory> getdocumenttypehistories( String documenttypeid) { Collection<String> doctypeids;

10 synchronized (documenttypehistorymap) { doctypeids = documenttypehistorymap.get(documenttypeid); if (null!= doctypeids) return entitymanager.get(emdocumenttypehistory.class, doctypeids); return Collections.emptyList(); Даже в самих бинах (на случай если свойство было не проинициализированно): public List<EMAttribute> getattributes() { if (null == this.attributes) this.attributes = new ArrayList<EMAttribute>(); return this.attributes; Правило: экранируя таким образом бины (через setter'ы и getter'ы), можно проводить необходимую инициализацию или предподготовку данных как в данном случае. Правило: (следует из предыдущего) если весь доступ у меня через getter'ы и setter'ы то для самих переменных-членов класса, делаю самый низкий уровень видимости: public.

Качество кода. Владимир Ярославский Инженер-программист. 11 декабря 2008 Sun Microsystems, Inc.

Качество кода. Владимир Ярославский Инженер-программист. 11 декабря 2008 Sun Microsystems, Inc. Качество кода Владимир Ярославский Инженер-программист 11 декабря 2008 Sun Microsystems, Inc. 1 Что будем улучшать Производительность Читаемость Ясность Дизайн 2 Доступ к другому коду Классы: package Атрибуты:

Подробнее

Приблизительные вопросы к зачёту (1 семестр) по дисциплине «СЕТЕВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ»

Приблизительные вопросы к зачёту (1 семестр) по дисциплине «СЕТЕВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ» Приблизительные вопросы к зачёту (1 семестр) по дисциплине «СЕТЕВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ» Тема 1. Введение в технологию Java Java как платформа, история создания. Среда разработки. Этапы создания

Подробнее

Ключевые слова языка С#

Ключевые слова языка С# 1 abstract, см. также 11, 55 2 as, см. также 37 Ключевые слова языка С# Модификатор abstract используется при объявлении класса, метода или свойства. Использование модификатора abstract в объявлении класса

Подробнее

Вступительное слово и обзор Java технологии

Вступительное слово и обзор Java технологии Вступительное слово и обзор Java технологии Евгений Беркунский, НУК eugeny.berkunsky@gmail.com http://www.berkut.mk.ua Что такое Java? Язык программирования Платформа: Аппаратная Операционная: Windows,

Подробнее

Паттерны проектирования

Паттерны проектирования Паттерны проектирования Введение Что такое «хороший дизайн» Точного универсального ответа на этот вопрос нет Есть стандартные решения для определенных задач паттерны Предложены хорошими специалистами Проверены

Подробнее

Инструкции C++ May 25, А.И. Гуда. Кафедра ИТС НМетАУ c C++ Statements / Инструкции C++

Инструкции C++ May 25, А.И. Гуда. Кафедра ИТС НМетАУ c C++ Statements / Инструкции C++ Инструкции C++ Это произведение доступно по лицензии Creative Commons Attribution-ShareAlike ( Атрибуция На тех же условиях ) 3.0 Непортированная. http://creativecommons.org/licenses/by-sa/3.0/deed.ru

Подробнее

Простейшая программа Hello, world!

Простейшая программа Hello, world! Простейшая программа Hello, world! // System.out.println("Привет, мир!"); Обязательные требования: 1) Имя файла, содержащего код программы, должно совпадать с именем класса 2) Файл должен иметь расширение.java

Подробнее

Основные принципы обработки исключений

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

Подробнее

Массивы. В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически ГЛАВА 10

Массивы. В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически ГЛАВА 10 ГЛАВА 10 Массивы В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически и могут присваиваться переменным типа Object ( 4.3.2). Все методы класса Object можно вызывать

Подробнее

Встроенная документация Java

Встроенная документация Java Встроенная документация Java Андрей Дмитриев andrei-dmitriev@yandex.ru http://in4mix2006.narod.ru/ 2008 Copyright (C) 2000-2008 Sun Microsystems, Inc. All rights reserved. Документация Необходимость поддержки

Подробнее

РАЗРАБОТКА СОВРЕМЕННОЙ РАСПРЕДЕЛЁННОЙ СИСТЕМЫ: ПРОБЛЕМЫ И РЕШЕНИЯ. Михаил Пересыпкин

РАЗРАБОТКА СОВРЕМЕННОЙ РАСПРЕДЕЛЁННОЙ СИСТЕМЫ: ПРОБЛЕМЫ И РЕШЕНИЯ. Михаил Пересыпкин РАЗРАБОТКА СОВРЕМЕННОЙ РАСПРЕДЕЛЁННОЙ СИСТЕМЫ: ПРОБЛЕМЫ И РЕШЕНИЯ Михаил Пересыпкин О себе С 1998 года разрабатывал на C/С++, что-то слышал про Java C 2000 по 2010: Ростелеком: стек J2SE/J2EE+Oracle C

Подробнее

Основы программирования на Java. Исключения

Основы программирования на Java. Исключения Основы программирования на Java Исключения Программа Классы и объекты в Java: основные сведения Управление памятью для ссылочных типов Реализация наследования в Java Пакеты как механизм реализации пространств

Подробнее

СПб АУ НОЦНТ РАН. Java

СПб АУ НОЦНТ РАН. Java СПб АУ НОЦНТ РАН Java 07 26.04.2016 1 / 11 InterruptedException try { Thread.sleep(100); catch (InterruptedException e) { //? 2 / 11 InterruptedException. Причина Причина: вызов метода interrupt на объекте

Подробнее

Объектно-ориентированное программирование. Лекция 13

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

Подробнее

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA ЯЗЫК VBA Язык VBA является объектно-ориентированным. Это значит, что многие его команды имеют особенный формат. Типичная команда VBA имеет вид: ..< >.

Подробнее

Эффективное программирование на Java

Эффективное программирование на Java Эффективное программирование на Java Андрей Дмитриев andrei-dmitriev@yandex.ru http://in4mix2006.narod.ru/ 2008 Copyright (C) 2000-2008 Sun Microsystems, Inc. All rights reserved. Программа Методы генерации

Подробнее

ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ. Пышкин Евгений Валерьевич к.т.н., доцент

ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ. Пышкин Евгений Валерьевич к.т.н., доцент ОСНОВЫ ТЕОРИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ Пышкин Евгений Валерьевич к.т.н., доцент ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Блок 9. Введение в модульное тестирование 3 Проблема тестирования разрабатываемых

Подробнее

Практическая работа 3

Практическая работа 3 Практическая работа 3 Задание на практическую работу В процессе написания тестовых заданий ознакомьтесь с: - принципами создания динамических структур в Java (Linked List, FIFO), - механизмами наследования

Подробнее

JAVA CANDIDATE CHECKLIST 1 / 8

JAVA CANDIDATE CHECKLIST 1 / 8 JAVA CANDIDATE CHECKLIST 1 / 8 SEVERAL QUESTIONS MAY IMPLY MORE THAN ONE CORRECT ANSWER I - ООP II - Java Fundamentals III - Java Collections IV - Java I/O V - XML VI - RDB concept VII - Networking # QUESTION

Подробнее

Основы платформы Microsoft.NET

Основы платформы Microsoft.NET Основы платформы Microsoft.NET Тема: Обработка ошибок Понятие исключения...1 Обработка исключений...2 Блок try...2 Блок catch...3 Блок finally...3 Пример обработки исключений...3 Обработка нескольких исключений...5

Подробнее

Функциональное программирование

Функциональное программирование Функциональное программирование Разделяет проблему на отдельные части Все было хорошо, пока в 2007 году не появились первые многоядерные процессоры Расчлененная на отдельные части императивная программа

Подробнее

Дополнительная образовательная программа по курсу «Программирование на языке Java»

Дополнительная образовательная программа по курсу «Программирование на языке Java» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Новосибирский национальный исследовательский государственный

Подробнее

Руководство по созданию сайта. для системы управления сайтами АТИЛЕКТ.CMS 7.0

Руководство по созданию сайта. для системы управления сайтами АТИЛЕКТ.CMS 7.0 Руководство по созданию сайта для системы управления сайтами АТИЛЕКТ.CMS 7.0 1. Описание файловой структуры сайта Файловая структура сайта представлена в следующем виде: Рис. 1 Ниже представлено описание

Подробнее

Структурные типы данных

Структурные типы данных Структурные типы данных Классы и структуры являются двумя основными конструкциями системы общих типов CTS (Common Type System) в платформе.net Framework. Каждая по сути является структурой данных, объединяющей

Подробнее

Рассмотрение и решение проблем проверки корректности пользовательских данных на стороне java-сервера

Рассмотрение и решение проблем проверки корректности пользовательских данных на стороне java-сервера # 05, май 2016 УДК 004.432 Рассмотрение и решение проблем проверки корректности пользовательских данных на стороне java-сервера Семенченко И. И., студент Россия, 105005, г. Москва, МГТУ им. Н.Э. Баумана,

Подробнее

Обработка исключительных ситуаций

Обработка исключительных ситуаций Обработка исключительных ситуаций Андрей Дмитриев andrei-dmitriev@yandex.ru http://in4mix2006.narod.ru/ 2008 Copyright (C) 2000-2008 Sun Microsystems, Inc. All rights reserved. Что должно произойти при

Подробнее

Лабораторная работа 13 Обработка XML файлов в Java

Лабораторная работа 13 Обработка XML файлов в Java Цель работы: Лабораторная работа 13 Обработка XML файлов в Java Овладеть навыками считывания данных из XML файлов в абстрактную структуру данных в оперативной памяти. Задача: Разработать методы класса

Подробнее

// конструктор матрицы с указанием ее размеров public Matrix(int rows, int cols) { a = new double[rows, cols]; }

// конструктор матрицы с указанием ее размеров public Matrix(int rows, int cols) { a = new double[rows, cols]; } Наследование Наследование это механизм, который позволяет создавать новые классы на основе существующих, используя их структурные и поведенческие свойства поля, методы, свойства и пр. Рассмотрим далее

Подробнее

МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» 6/2016 ISSN Х

МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» 6/2016 ISSN Х 5. Ожегов, С. И. Толковый словарь русского языка / С. И. Ожегов, Н. Ю. Шведова. - М.: Азбуковник, 2000. - 940 с. 6. Пушников А.Ю. Введение в системы управления базами данных. Часть 1. Реляционная модель

Подробнее

ОБЗОР ОСОБЕННОСТЕЙ ЯЗЫКА ПРОГРАММИРОВАНИЯ KOTLIN.

ОБЗОР ОСОБЕННОСТЕЙ ЯЗЫКА ПРОГРАММИРОВАНИЯ KOTLIN. УДК 004.432 Колмакова Е.Н., студентка 3 курс, факультет «Информационные системы и технологии» Поволжский Государственный Университет Телекоммуникаций и Информатики Россия, г. Самара ОБЗОР ОСОБЕННОСТЕЙ

Подробнее

Увеличение модульности программного обеспечения на языке Java.

Увеличение модульности программного обеспечения на языке Java. Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования Увеличение модульности программного обеспечения на языке Java. Курсовая работа студента

Подробнее

Урок 2. Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы

Урок 2. Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы ! Урок 2 Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы План 1. Типы данных 2. Переменные. Константы и литералы 3. Операторы 1. Понятие

Подробнее

Модульное тестирование при помощи JUnit. Андрей Дмитриев 2008

Модульное тестирование при помощи JUnit. Андрей Дмитриев  2008 Модульное тестирование при помощи JUnit Андрей Дмитриев andrei-dmitriev@yandex.ru http://in4mix2006.narod.ru/ 2008 Программа Введение Установка Возможности JUnit Пример тестового случая Автоматизация разработки

Подробнее

Классы, объекты и пакеты в Java

Классы, объекты и пакеты в Java Классы, объекты и пакеты в Java Алексей Владыкин 3 октября 2012 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42 1 Основы ООП 2 Объявление класса 3 Использование класса 4 Наследование

Подробнее

Основные понятия языка программирования VBA

Основные понятия языка программирования VBA ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.И.Лобачевского» Факультет вычислительной

Подробнее

JavaScript. Базовые вещи

JavaScript. Базовые вещи JavaScript. Базовые вещи Типы Типы верхнего уровня: - Object - boolean - number - string - null - undefined Все остальное наследники типа Object: - Array, function - RegExp, Date, HTMLElement - любые кастомные

Подробнее

4 Классы. 4.1 Основы классов

4 Классы. 4.1 Основы классов 4 Классы Класс центральный компонент Java. Поскольку класс определяет форму и сущность объекта, он является той логической конструкцией, на основе которой построен весь язык. Как таковой, класс образует

Подробнее

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

Оператор представляет собой отдельно взятую команду, которая осуществляет то или иное действие интерпретатора Java при выполнении программы. ГЛАВА 6 Операторы и блоки Оператор представляет собой отдельно взятую команду, которая осуществляет то или иное действие интерпретатора Java при выполнении программы. GigSim simulator = new GigSim( "Давай,

Подробнее

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы ООП. С++. Вопросы для проверки и закрепления знаний. 1. Проанализируйте ранее разработанные Вами программы и ответьте на вопрос: в каких из них наблюдается слабая связь между структурой данных и функционированием

Подробнее

Язык программирования Си++ Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки.

Язык программирования Си++ Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки. Язык программирования Си++ Иванов А.П., Князева О.С. Семинар 2. Массивы объектов. Массивы переменной длины. Операторы new, delete. Указатели. Ссылки. 1. Массивы объектов Встроенное в язык Си++ понятие

Подробнее

4. Понятие класса. Программа 7. Класс Box

4. Понятие класса. Программа 7. Класс Box 4. Понятие класса Класс определяет новый тип данных, используя который можно определять переменные этого типа, которые называются объектами или экземплярами класса. Объявление класса имеет вид: class classname

Подробнее

Процедуры, модули и модули классов

Процедуры, модули и модули классов УРОК 7 Процедуры, модули и модули классов Содержание урока Понятие процедуры Работа с модулями Использование модулей классов Создание и выполнение процедур Осталось 30 минут В предыдущих уроках было продемонстрировано,

Подробнее

Лекция 2. Как выполняются программы на C++

Лекция 2. Как выполняются программы на C++ http://compscicenter.ru 1/21 Лекция 2. Как выполняются программы на C++ Александр Смаль CS центр 15 сентября 2016 Санкт-Петербург http://compscicenter.ru 2/21 Типы данных Целочисленные: 1. char (символьный

Подробнее

Объектно-ориентированное программирование в PHP для начинающих

Объектно-ориентированное программирование в PHP для начинающих Объектно-ориентированное программирование в PHP для начинающих Доброго времени суток, уважаемые читатели нашего блога! Добро пожаловать на первый урок из серии уроков по объектноориентированному программированию

Подробнее

Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам

Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам Шаблоны 2013 Шаблоны ( template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию)

Подробнее

Курс «Язык С++» Симуни Михаил Лазаревич. msimuni.wikidot.com/cpp группа курс "Язык С++" (мат-мех 17)

Курс «Язык С++» Симуни Михаил Лазаревич. msimuni.wikidot.com/cpp группа курс Язык С++ (мат-мех 17) Язык С++ 1 Курс «Язык С++» Симуни Михаил Лазаревич msimuni.wikidot.com/cpp группа курс "Язык С++" (мат-мех 17) simuni@mail.ru 2 Какие темы будут в курсе? Простые вещи указатели, функции, классы, наследование,

Подробнее

Лабораторная работа 5. Часть 1. Исключительные ситуации

Лабораторная работа 5. Часть 1. Исключительные ситуации Лабораторная работа 5 Часть 1. Исключительные ситуации В предыдущих классах входные параметры методов и конструкторов никак не проверялись. Однако, например, если при вызове конструктора класса Product

Подробнее

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ Глава 15 Делегаты Делегаты предназначены для случаев, в которых C++, Pascal и Modula используют указатели на функции. В отличие от последних в C++ делегаты являются полностью объектно-ориентированными.

Подробнее

1Сильные стороны. привлекательная внешность, мужественная осанка вот и все мое колдовство. Уильям Шекспир. Виндзорские насмешницы

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

Подробнее

Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С#

Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С# Лекция 2. Основные понятия объектно-ориентированного подхода: объекты, классы и методы и их реализация в С# В лекции рассмотрены вопросы, относящиеся к идеологии, методологии и практике моделирования основных

Подробнее

public private Обертывание

public private Обертывание Интерфейсы Основное назначение интерфейсов - обеспечить возможность классу иметь несколько родителей - один полноценный класс, а остальные в виде интерфейсов. Интерфейс позволяет описывать некоторые желательные

Подробнее

C# (.NET) CANDIDATE CHECKLIST 1 / 5

C# (.NET) CANDIDATE CHECKLIST 1 / 5 C# (.NET) CANDIDATE CHECKLIST 1 / 5 SEVERAL QUESTIONS MAY IMPLY MORE THAN ONE CORRECT ANSWER # QUESTION CORRECT ANSWER OR CHOICE 1 Требуется создать класс B, использующий в качестве базового класс A. Выберите

Подробнее

Обработка ошибок. Обработка ошибок. Александр Смаль. CS центр 2 марта 2016 Санкт-Петербург. 1/22

Обработка ошибок. Обработка ошибок. Александр Смаль. CS центр 2 марта 2016 Санкт-Петербург.  1/22 http://compscicenter.ru 1/22 Александр Смаль CS центр 2 марта 2016 Санкт-Петербург http://compscicenter.ru 2/22 Способы обработки ошибок Отсутствие обработки ошибок. size_t write ( string file, DB const

Подробнее

ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто

ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто Опубликовано в научно-техническом вестнике СПбГУ ИТМО. 2006, 25. c. 102 110. ПОСТРОЕНИЕ МОДЕЛИ ДАННЫХ ПРОГРАММЫ ПО ИСХОДНОМУ КОДУ Г.А. Корнеев Научный руководитель А.А. Шалыто В работе предлагается метод

Подробнее

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

Обработка исключений Обработка исключений Во время работы программы могут случиться три вида ошибок: - Программные ошибки ошибки разработчика программы. - Пользовательские ошибки ошибки со стороны пользователя программы. -

Подробнее

Лекция 5. Система поддержки времени исполнения (Run-time system, RTS)

Лекция 5. Система поддержки времени исполнения (Run-time system, RTS) Лекция 5 Система поддержки времени исполнения (Run-time system, RTS) Содержание Что такое RTS Определение и примеры RTфункций Общие принципы проектирования и оптимизации RTS Механизмы управления памятью

Подробнее

Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да,

Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да, Глава 3 Краткий обзор языка C# Эта глава предлагает молниеносное турне на тему возможностей языка C#. Да, мы уже слышим ваши возражения: Но ведь просто невозможно сжать всю информацию о C# в одну главу!

Подробнее

Java-классы: взгляд изнутри

Java-классы: взгляд изнутри Java-классы: взгляд изнутри Алексей Владыкин 27 октября 2014 Алексей Владыкин Java-классы: взгляд изнутри 27 октября 2014 1 / 29 1 Reflection API 2 Расположение объекта в памяти 3 Байткод Java Алексей

Подробнее

foreach Выполняет перебор последовательности элементов. Последовательность (коллекция) массив наследник IEnumerable, IEnumerable

foreach Выполняет перебор последовательности элементов. Последовательность (коллекция) массив наследник IEnumerable, IEnumerable<T> foreach Выполняет перебор последовательности элементов. Последовательность (коллекция) массив наследник IEnumerable, IEnumerable Не следует изменять коллекцию при перечислении. Синтаксис foreach foreach

Подробнее

Лабораторная работа 2. Ручное построение нисходящих синтаксических анализаторов

Лабораторная работа 2. Ручное построение нисходящих синтаксических анализаторов Лабораторная работа 2. Ручное построение нисходящих синтаксических анализаторов 26 апреля 2011 г. Введение Цель данной лабораторной работы научиться разрабатывать грамматики для заданных неформально языков

Подробнее

Язык программирования Си++ Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания.

Язык программирования Си++ Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания. Язык программирования Си++ Иванов А.П., Князева О.С. Семинар 9. Зачет: методика его проведения, теоретический минимум и типовые задания. Зачет проводится в практикуме и состоит из двух частей: теоретической

Подробнее

ПРИЛОЖЕНИЕ 2 КОДЫ ОШИБОК Syntax error RETURN without GOSUB Out of data Illegal fuction call

ПРИЛОЖЕНИЕ 2 КОДЫ ОШИБОК Syntax error RETURN without GOSUB Out of data Illegal fuction call 165 ПРИЛОЖЕНИЕ 2 КОДЫ ОШИБОК В QBasic существуют два основных типа ошибок: ошибки периода компиляции и периода выполнения. Первые это в основном синтаксические ошибки, обнаруженные компилятором, вторые

Подробнее

Платформа Сбербанка Архитектурные развилки

Платформа Сбербанка Архитектурные развилки Платформа Сбербанка Архитектурные развилки 07.04.2017 Докладчик Алексей Курагин Архитектор Центр развития ядра платформы Сбербанк-Технологии Новосибирск 2 План доклада Введение в GridGain Переход на IMDG

Подробнее

Волков Илья Малышев Александр

Волков Илья Малышев Александр Создание языка программирования для системы тарификации Волков Илья Малышев Александр JPoint 2017 Тарификация основа основ вклады переводы платежи кредиты страхование 2 Хранение тарифов Перевод в рублях

Подробнее

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ Министерство образования Республики Беларусь Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Кафедра информатики А.А. Волосевич ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

Подробнее

2 От до

2 От до ПЕРЕМЕННЫЕ Иногда необходимо запомнить или записать кое-что на память. Мы для этого пользуемся, например, записной книжкой (простой или электронной) или записями на бумаге. При выполнении вычислений или

Подробнее

Введение в язык Java

Введение в язык Java Лекция 3 Введение в язык Java Простейшая программа на Java Простейшая программа на языке программирования Java выглядит примерно так: public class HelloWorld { public static void main(string args []) {

Подробнее

Одномерные массивы. Лабораторная работа 9

Одномерные массивы. Лабораторная работа 9 Лабораторная работа 9 Одномерные массивы Массивы. Ссылочные типы и null. Часто в программах требуется завести большое количество переменных одного и того же типа. Можно, конечно, написать большое количество

Подробнее

Программа дисциплины

Программа дисциплины МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное учреждение высшего профессионального образования "Казанский (Приволжский) федеральный университет" Институт

Подробнее

Лекция 5. PHP И ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Лекция 5. PHP И ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Лекция 5. PHP И ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 5.1. Основы ООП 5.2. Классы и объекты в PHP 5.3. Наследование классов в PHP 5.4. Полиморфизм классов в PHP 5.5. Работа с объектами классов PHP

Подробнее

Java-библиотека «BHCrypto» (Demo-версия)

Java-библиотека «BHCrypto» (Demo-версия) Java-библиотека «BHCrypto» (Demo-версия) Описание программного интерфейса Java-библиотека «BHCrypto» (Demo-версия) Описание 2 программного интерфейса 2 АННОТАЦИЯ В документе приводится описание программного

Подробнее

Java-классы под капотом

Java-классы под капотом Java-классы под капотом Алексей Владыкин 20 ноября 2015 Алексей Владыкин Java-классы под капотом 20 ноября 2015 1 / 28 1 Reflection API 2 Расположение объекта в памяти 3 Байткод Java Алексей Владыкин Java-классы

Подробнее

Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур.

Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур. Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур. Общие сведения о языке программирования Паскаль Язык программирования Паскаль (Pascal) является

Подробнее

Языки и методы программирования. Электронные тесты промежуточного контроля знаний

Языки и методы программирования. Электронные тесты промежуточного контроля знаний МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика

Подробнее

Введение 15 Структура книги 16 Соглашения, используемые в книге 16 Об авторах 17 Благодарности 17 Ждем ваших отзывов! 18

Введение 15 Структура книги 16 Соглашения, используемые в книге 16 Об авторах 17 Благодарности 17 Ждем ваших отзывов! 18 Введение 15 Структура книги 16 Соглашения, используемые в книге 16 Об авторах 17 Благодарности 17 Ждем ваших отзывов! 18 Часть I. Язык 19 Глава 1. Соглашение об именах 21 Имена классов 21 Имена интерфейсов

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016. Лекция 24

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016. Лекция 24 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016 Лекция 24 1 Хеш-таблицы Словарные операции: добавление, поиск и удаление элементов по их ключам. Организуется таблица ключей: массив Index[m]

Подробнее

Операции и выражения

Операции и выражения Глава 5 Операции и выражения В этой главе Выражения в языке VBA Совместимость типов данных Оператор присваивания Арифметические операторы Логические операторы Операторы сравнения Строковые операторы Приоритеты

Подробнее

По выполнению лабораторных работ по курсу «Технологии программирования»

По выполнению лабораторных работ по курсу «Технологии программирования» Методические указания По выполнению лабораторных работ по курсу «Технологии программирования» Лабораторная работа «Разработка графического пользовательского интерфейса (GUI) для редактирования списка записей»

Подробнее

Языки программирования и методы трансляции

Языки программирования и методы трансляции Языки программирования и методы трансляции Имена, связывание, области видимости 1 Время связывания 2 3 Статические области видимости Динамические области видимости Имя, область видимости и связывание Имя

Подробнее

2.5.3 Операторы. + Сложение - Вычитание, унарный минус * Умножение / Деление % Деление по модулю -- Декремент ++ Инкремент

2.5.3 Операторы. + Сложение - Вычитание, унарный минус * Умножение / Деление % Деление по модулю -- Декремент ++ Инкремент 2.5.3 Операторы В языке Java предусмотрен обширный ряд операторов, предоставляющих программисту возможность полного контроля над построением и вычислением выражений. Большинство операторов относится к

Подробнее

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

Реализация приложений с использованием системных математических функций Лекция 8 Реализация приложений с использованием системных математических функций В рассмотренных нами приложениях калькуляторов были использованы варианты вычислений с использованием арифметических операций.

Подробнее

C#: пользовательские типы

C#: пользовательские типы C#: пользовательские типы типы данных C# типы значения: перечисления (enum) структуры (struct) ссылочные типы: массивы классы (class) перечисления Существует возможность декларировать перечислимые типы

Подробнее

2.5.2 Типы данных, литералы, переменные, константы

2.5.2 Типы данных, литералы, переменные, константы 2.5.2 Типы данных, литералы, переменные, константы Для решения различных задач программы используют различные данные. Язык Java является строго типизированным языком. Это значит, что контроль типов осуществляется

Подробнее

Затем мы создаем таблицу для счета Account, и Accounting.AccountActivity для того чтобы хранить операции по счету:

Затем мы создаем таблицу для счета Account, и Accounting.AccountActivity для того чтобы хранить операции по счету: Использование триггеров Задание 1.Проверка принадлежности к диапазону В качестве примера, рассмотрим простую систему бухгалтерского учета. Как пользователь депозита, Вы должны убедиться, что баланс никогда

Подробнее

Google AI Challenge Java.

Google AI Challenge Java. Google AI Challenge Java. 1. Качаем стартовый пакет для Java. 2. Качаем Eclipse IDE for Java Developers 3. Устанавливаем Eclipse, создаем новый проект и копируем исходники на java 4. Открываем MyBot.java

Подробнее

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014.

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014. Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP Осень-Зима 2014 Лекция 3 PHP Синтаксис языка Переменные, константы, типы данных

Подробнее

public class Test { public static void main(string args[]) { B b = new B(); System.out.println("x = " + b.getresult(0, 1)); } }

public class Test { public static void main(string args[]) { B b = new B(); System.out.println(x =  + b.getresult(0, 1)); } } Вариант 1. 1. Какой результат выполнения программы: Вариант 1 #1 class A { final public int getresult(int a, int b) { return 0; class B extends A { public int getresult(int a, int b) { return 1; public

Подробнее

Стандартная библиотека Java: пакет java.util

Стандартная библиотека Java: пакет java.util Стандартная библиотека Java: пакет java.util Что такое коллекции Разнообразные контейнеры для хранения наборов объектов Предоставляют значительно больше возможностей, чем массивы В первую очередь, возможность

Подробнее

Миграция с PL/SQL на Java. Яков Сироткин

Миграция с PL/SQL на Java. Яков Сироткин Миграция с PL/SQL на Java Яков Сироткин О докладчике Работал в DataArt, Яндексе, лаборатории алгоритмической биологии Академического университета и в других местах 10 лет делал JUG.RU Рассказываю о тяжелой

Подробнее

Компьютерные науки 2 единицы обучения Указания экзаменующимся

Компьютерные науки 2 единицы обучения Указания экзаменующимся Государство Израиль Министерство просвещения Тип экзамена: а. на аттестат зрелости для средних школ б. на аттестат зрелости для экстернов Время проведения экзамена: лето 5 года Номер вопросника: 899, 6

Подробнее

МЭК протокол связи в пределах подстанции на базе Ethernet

МЭК протокол связи в пределах подстанции на базе Ethernet МЭК 61850 протокол связи в пределах подстанции на базе Ethernet Проверка реле Указание по применению Стандарт МЭК 61850 описывает связь устройств на подстанции. GOOSE сообщения (GOOSE - метод обмена информацией

Подробнее

Обработка ошибок и отладка

Обработка ошибок и отладка Web-технологии Обработка ошибок и отладка Кулаков Кирилл Александрович ПетрГУ, 2017 1 Модель ошибок Категории ошибок PHP Информационные (неопределенные константы, переменные, var перед свойством) Ошибки

Подробнее

Это означает «получить текущее значение x, прибавить к нему 1 и затем обновить x, присвоив ему новое значение».

Это означает «получить текущее значение x, прибавить к нему 1 и затем обновить x, присвоив ему новое значение». Python for Informatics Автор: Dr. Charles R. Severance Содержание курса: http://pycode.ru/edu/why-python/ Глава 5. Итерации 5.1. Обновление переменной Общим шаблоном в инструкциях присваивания является

Подробнее

3.3.4 Применение оператора break для выхода из цикла

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

Подробнее

начинаться с буквы латинского алфавита, символа подчёркивания или доллара: не совпадать с каком-либо ключевым словом:

начинаться с буквы латинского алфавита, символа подчёркивания или доллара: не совпадать с каком-либо ключевым словом: Часть 2 1.2. Переменные и типы данных В этом модуле будет рассказано о: 1.2.1. переменных и работе с ними; 1.2.2. типах данных и числовом типе данных; 1.2.3. строковом типе данных; 1.2.4. логическом типе

Подробнее

4.13 Список аргументов переменной длины

4.13 Список аргументов переменной длины 4.13 Список аргументов переменной длины В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Это средство получило название

Подробнее

Стандартная библиотека Java: пакет java.util

Стандартная библиотека Java: пакет java.util Стандартная библиотека Java: пакет java.util Алексей Владыкин 24 октября 2012 Алексей Владыкин java.util 24 октября 2012 1 / 33 1 Collections Framework 2 Generics 3 Другие классы java.util Алексей Владыкин

Подробнее

Лексика языка. Лекция 9

Лексика языка. Лекция 9 Лекция 9 Лексика языка Лекция посвящена описанию лексики языка Java. Лексика описывает, из чего состоит текст программы, каким образом он записывается, и на какие простейшие слова (лексемы) компилятор

Подробнее

Общение с футболистами с помощью радиомодулей R-Cat производства Мовиком

Общение с футболистами с помощью радиомодулей R-Cat производства Мовиком Общение с футболистами с помощью радиомодулей R-Cat производства Мовиком Мовиком, 2006 28.11.2006 Содержание 1. Инициализация и минимальный код для работы с USB радио модулями производства Мовиком....3

Подробнее

А. Богданов draft-bogdanov-umsp-comments-00.txt. НКО "ОРС" Истекает в апреле 2001 Октябрь 2000

А. Богданов draft-bogdanov-umsp-comments-00.txt. НКО ОРС Истекает в апреле 2001 Октябрь 2000 Богданов Истекает в апреле 2001 [Стр. 1] Internet-Draft А. Богданов draft-bogdanov-umsp-comments-00.txt НКО "ОРС" Истекает в апреле 2001 Октябрь 2000 Комментарии к Протоколу Объединенного Пространства

Подробнее