Java и различия в Коболе [закрываются]

5
задан Donato Szilagyi 25 February 2013 в 20:01
поделиться

5 ответов

COBOL был популярен по простой причине - для разработки бизнес-приложений.

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

MOVE 3.14 INTO VARPI.
SUBTRACT ZERO FROM VARPI GIVING VARPIRESULT.
IF VARPIRESULT AND ZERO EQUALS VARPI THEN DISPLAY 'Ok'.

Если я помню, предложения COBOL должны быть в столбце 30 ...

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

Я работал над материалом Y2k на мэйнфрейме (IBM MVS / 360), и это было невероятно на заре 21-го века, молясь, чтобы исправления, которые я внес, не поставили бизнес-приложения на колени .. .Это было шумихой, помимо этого ... до сих пор он все еще используется из-за серьезной скорости передачи данных внутри мэйнфреймов и простоты обслуживания.

Для начала я знаю, что Java не просто сможет это сделать, есть ли у Java порт, доступный для этих мэйнфреймов (IBM MVS / 360, 390, AS400)?

Теперь предприятия не могут позволить себе сбрасывать COBOL как они фактически «совершили бы самоубийство», поскольку именно там находятся их бизнес-приложения, поэтому обновление, миграция, перенос на другой язык обходятся слишком дорого и могут вызвать серьезную головную боль в современном мире бизнеса. .

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

Представьте себе, система здравоохранения (я работал в одной, которая работала в системе, о которой я упоминал выше) должна была отказаться от всей своей обработки заявок, выставления счетов и т. Д. (Написанных на COBOL) на Java, наряду с возможностью возникновения сбоев и не говоря уже о серьезной сумме $ $ $ для инвестирования, которая будет стоить самой медицинской компании намного дороже, конечным результатом будет хаос и потеря денег, а клиенты (корпорации, которые предлагают льготы сотрудникам) в конечном итоге бросят компанию ради лучший.

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

COBOL - это:

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

В отличие от

Java:

  • Объектно-ориентированный
  • Синтаксис может быть сложным
  • Требуется виртуальная машина Java для запуска и выполнения скомпилированного байт-кода.

Надеюсь, это поможет,

2
ответ дан 14 December 2019 в 08:51
поделиться

Сходства

  1. Кобол и Java собирались изменить мир и решить проблему программирования.

  2. Ни один из них не оправдал первоначального ажиотажа.

  3. Сейчас существуют очень большие, раздутые программы Cobol и Java, которые используются банками и являются «наследием»... слишком большой и критический, чтобы переписать или выбросить.

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

Отличия

  1. Кобола придумал американец, Изящество Мюррей Хоппер, получивший высшую награду Министерства обороны, медаль «За выдающиеся заслуги в обороне».

  2. Яву изобрел канадец Джеймс Гослинг, получивший высшую гражданскую честь Канады, офицер Ордена Канады.

3 COBOL convention использует «-» для разделения слов в названиях, Java convention использует верхний/нижний CamelCase.

-121--4904252-

Если вы хотите сделать только небольшую халтурную вещь сделать

class A(object):
    ...
some_func(A)

Если вы хотите сделать что-то более сложное, вы можете использовать метакласс. Метакласс отвечает за управление объектом класса до его полного создания. Шаблон:

class AType(type):
    def __new__(meta, name, bases, dct):
        cls = super(AType, meta).__new__(meta, name, bases, dct)
        some_func(cls)
        return cls

class A(object):
    __metaclass__ = AType
    ...

тип является метаклассом по умолчанию. Экземпляры метаклассов являются классами, поэтому __ new __ возвращает измененный экземпляр (в данном случае) A .

Для получения дополнительной информации о метаклассах см. http://docs.python.org/reference/datamodel.html#customizing-class-creation .

-121--1620346-

Сходства:

  1. Как чрезвычайно многословные, так и созданные с точечными боссами, а не программистами.
  2. Оба используются в основном для скучного бизнес-программного обеспечения.
  3. Оба обладают огромным наследием и скоро будут.
1
ответ дан 14 December 2019 в 08:51
поделиться

COBOL - это чистый процедурный язык, даже в нем даже функционирует (я использовал COBOL в 90-х годах, поэтому он мог измениться с).
Java это OO (хотя я слышал, что есть версия OO для Cobol), о, и синтаксис отличается.


Отличный список сходства и различий: http://www.jsrsys.com/jsrsys/s8383sra.htm

it'swhat Мы делаем! Cobol: Cobol Concept Описание Java: Java / OO Подобная концепция ++: какая Java / OO добавляет к концепции Когда я начал Java, я привык думать о том, что OO (объектная ориентация) была «просто как« хорошие практики программирования, за исключением того, что она была более формальной, а компилятор принудил определенные ограничения.

Я больше не думаю. Однако, когда вы начинаете, я думаю, что некоторые «похожи на» Примеры помогут вам понять концепции.

COBOL: Модуль нагрузки / программа Java: класс

COBOL: выполнить Java: метод ++: может пройти параметры методу, больше похоже на функцию Другие программы / классы могут вызывать методы в разных классах, если они объявили публику. Public / Private дает дизайнеру много контроля над тем, какие другие классы могут видеть в классе.

COBOL: рабочий хранилище, статически связанные подпина Java: переменные экземпляра ++: (см. Далее)

COBOL: Рабочая история, динамически загруженная подпина Java: переменные классов ++: Java может смешивать оба классы (называемые статическими, просто обратный пример нашего Cobol, а также переменные экземпляра (по умолчанию). Переменные классов (статические) происходят только один раз в классе (действительно в одной среде выполнения JVM). Переменные экземпляра уникальны для каждого экземпляра класса. Вот пример из класса jsrsysout. С моего фона COBOL я люблю отлаживать свой код, отображая значительные данные в набор данных SYSOUT. Для этого есть метод Java, System.out.Prinln (...). Проблема с этим способом заключается в том, что данные, которые вы хотите просто прокручивать консоль Java, эквивалент Sysout или, возможно, отображать на консоли, если у вас был собственный автономный аппарат. Мне нужен путь, чтобы легко сделать дисплеи, которые остановились бы, когда экран был полон. Поскольку есть только одна консоль Java, подсчет строки для экрана, четко должен быть переменной класса, поэтому все экземпляры (каждая программа / класс, в которой здесь есть собственный экземпляр jsrsysout), останавливается в нижней части экрана.

Несколько экземпляров того же класса: Один (вызывающий программа) класс может создать несколько экземпляров одного класса. Почему вы хотите сделать это? Один хороший пример Cobol - это процедуры ввода / вывода. В COBOL вам нужно будет кодировать одну процедуру ввода / вывода для каждого файла, который вы хотите получить доступ. Если вы хотите дважды открыть определенный файл в одной среде выполнения, вам понадобится разная процедура ввода / вывода с другим именем, даже если логика была идентична.

С Java вы можете записать только один класс для определенного типа логического файла. Затем для каждого файла вы хотите прочитать (или писать), вы просто создаете другой экземпляр этого класса, используя новый оператор. Вот несколько фрагментов кода из программы IBFEXTRACT, которые имеют именно это. Эта программа использует тот факт, что я написал класс для ввода строки, а другой класс для вывода линии. Они называются jsrlinein и jsrlineout.

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

COBOL: картина Java: нет реального эквивалента. Поэтому я изобрел метод MYMIC ZZZ, ZZZ, ... Маска для целочисленного входа. Я вообще сгруппировал свои полезные функции в jsrutil. Это методы, которые действительно не связаны с любым типом объекта. Вот пример Padleft, который реализует эту логику. Padleft также является хорошим примером полиморфизма. В COBOL, если у вас есть разные списки параметров, вам нужны разные точки входа. В Java типы параметров являются частью определения. Например:

COBOL: десятичная арифметика Java: не в родной Java, но IBM внедрил несколько бигмальных классов. Я считаю это серьезной слабостью Java для приложений бухгалтерского типа. Мне бы хотелось увидеть упакованные десятичные данные типа данных как часть родной архитектуры байтов JVM. Я думаю, это не там, потому что он не в C или C ++. Я только читал о бигнечных классах, поэтому я не могу реально комментировать их эффективность.

COBOL: копировать или включить Java: наследство ++: гораздо более мощный! В COBOL, если вы измените копию или включите участника, вы должны перекомпилировать все программы, которые его используют. В Java, если программа B наследует из программы A, изменение программы A автоматически унаследована программой B без перекомпилирования! Да, это действительно работает, и придает большую власть приложениям Java. Я использовал это для моей системы чтения / сортировки / отчетов. Класс IBFreport содержит всю основную логику, общую к программам отчета. Он имеет соответствующие значения по умолчанию для всех его методов. Классы IBFRP #### Extend IBFreport,и содержат только эти методы, уникальные для конкретного отчета. Если изменение производится в IBFreport, он отражен в программах IBFRP #### (классы) в следующий раз, когда они запускаются.

Кобол: на исключение Java: попробуйте / бросить / поймать ++: может ограничить объем обнаружения ошибок (см. Ниже)

COBOL: Open Java: входные потоки ++: автоматическое обнаружение ошибок, как благословение, так и проклятие.

COBOL: напиши Java: Напишите (да, действительно).

COBOL: закрыть Java: Способ закрытия

COBOL: READ Java: читать ...

0
ответ дан 14 December 2019 в 08:51
поделиться

К сожалению, Apple не предоставляет простых способов введения значений в структуру NSDecimal. Само определение структуры можно найти в заголовке NSDecimal.h:

typedef struct {
    signed   int _exponent:8;
    unsigned int _length:4;     // length == 0 && isNegative -> NaN
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[NSDecimalMaxSize];
} NSDecimal;

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

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

Я всегда работаю только с NSDecimals в моих высокоточных расчетах, и беру и экспортирую NSStrings для обмена этими значениями с внешним миром. Чтобы создать NSDecimal на основе NSString, можно использовать подход, который мы используем в основной структуре графика :

NSDecimal CPDecimalFromString(NSString *stringRepresentation)
{
    NSDecimal result;
    NSScanner *theScanner = [[NSScanner alloc] initWithString:stringRepresentation];
    [theScanner scanDecimal:&result];
    [theScanner release];

    return result;
}

Использование NSScanner вместо NSDecimalNumber -initWireString: locale: примерно на 90% быстрее в тестах.

-121--1667194-

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

Относительно часто встречается в сообществе Лисп. Например, некоторые университетские классы используют Scheme для написания языкового подмножества (это не действие класса компилятора).

При этом многие компиляторы написаны на других языках. Например, PUGS (Perl 6) написан на языке Haskell. Ruby доступен на языке C или Java (как JRuby ).

-121--1478286-

Сходства

  1. Кобол и Java собирались изменить мир и решить проблему программирования.

  2. Ни один из них не оправдал первоначального ажиотажа.

  3. Сейчас существуют очень большие, раздутые программы Cobol и Java, которые используются банками и являются «наследием»... слишком большой и критический, чтобы переписать или выбросить.

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

Отличия

  1. Кобола придумал американец, Изящество Мюррей Хоппер, получивший высшую награду Министерства обороны, медаль «За выдающиеся заслуги в обороне».

  2. Яву изобрел канадец Джеймс Гослинг, получивший высшую гражданскую честь Канады, офицер Ордена Канады.

3 COBOL convention использует «-» для разделения слов в названиях, Java convention использует верхний/нижний CamelCase.

3
ответ дан 14 December 2019 в 08:51
поделиться

К сожалению, Apple не предоставляет простых способов введения значений в структуру NSDecimal. Само определение структуры можно найти в заголовке NSDecimal.h:

typedef struct {
    signed   int _exponent:8;
    unsigned int _length:4;     // length == 0 && isNegative -> NaN
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[NSDecimalMaxSize];
} NSDecimal;

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

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

Я всегда работаю только с NSDecimals в моих высокоточных расчетах, и беру и экспортирую NSStrings для обмена этими значениями с внешним миром. Чтобы создать NSDecimal на основе NSString, можно использовать подход, который мы используем в основной структуре графика :

NSDecimal CPDecimalFromString(NSString *stringRepresentation)
{
    NSDecimal result;
    NSScanner *theScanner = [[NSScanner alloc] initWithString:stringRepresentation];
    [theScanner scanDecimal:&result];
    [theScanner release];

    return result;
}

Использование NSScanner вместо NSDecimalNumber -initWireString: locale: примерно на 90% быстрее в тестах.

-121--1667194-

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

Относительно часто встречается в сообществе Лисп. Например, некоторые университетские классы используют Scheme для написания языкового подмножества (это не действие класса компилятора).

При этом многие компиляторы написаны на других языках. Например, PUGS (Perl 6) написан на языке Haskell. Ruby доступен на языке C или Java (как JRuby ).

-121--1478286-

Проще указать, что у них общего, а не перечислять их различия.

Итак, вот список:

  1. Вы можете использовать оба для того, чтобы компьютер делал вещи
  2. Они оба компилируются на другой язык (машинный код, байт-код)
  3. Вот это!
1
ответ дан 14 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: