Как обновление программного обеспечения работает?

Использовать Чеканить .

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

Это гораздо более развитый и настраиваемый, чем любой другой пакет!

5
задан rapfaria 26 June 2009 в 19:04
поделиться

7 ответов

Взгляните на книгу

Практическое проектирование API - Признания архитектора Java Framework (Ярослав Тулач, Apress, 2008)

Я думаю, что она охватывает большую часть аспекты, о которых вы спрашиваете.

Для темы о доставке новых версий или обновлений программного обеспечения, посмотрите, например, технологию Java Web Start .

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

1 или набором серверов

3
ответ дан 15 December 2019 в 01:09
поделиться

Разве это не относится к принципу единой ответственности. http://en.wikipedia.org/wiki/Single_responsibility_principle

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

-1
ответ дан 15 December 2019 в 01:09
поделиться

Я думаю, что вы пытаетесь понять концепцию использования интерфейса как типа. В java-программе переменная может быть объявлена ​​как имеющая тип определенного интерфейса. Затем классы, реализующие этот интерфейс, могут быть созданы для переменных типа интерфейса. Однако можно использовать только методы, объявленные в интерфейсе. Во время компиляции интерфейс используется для проверки типов. Однако во время выполнения байт-код, который фактически выполняет работу, исходит от разработчика интерфейса. Пример:

public interface foo {
    public void bar();
}

public class A implements foo {
    public void bar() {
        // some code
    }
}

public class Example {
    public static void main(String[] args) {
        foo aFoo = new A();
        aFoo.bar();
    }
}

В классе Example переменная с именем aFoo объявлена ​​как имеющая тип foo, интерфейс. A, реализующий интерфейс foo, будет содержать код для выполнения работы метода bar (). В классе Example переменная aFoo получает экземпляр класса A, поэтому любой код из метода bar () A будет выполняться при вызове aFoo.bar (), даже если aFoo объявлен как имеющий тип foo.

Итак, мы установили, что вся работа выполняется в class A. Каждый из двух классов и одного интерфейса выше может быть определен в своем собственном файле. Все три результирующих файла .class можно упаковать в jar-файл и отправить клиентам как версию программы 1.0. Некоторое время спустя в реализации bar () в классе A может быть обнаружена ошибка. После разработки исправления, предполагающего, что все изменения содержатся внутри метода bar (), необходимо отправить только файл .class для A. клиентов. Обновленный A.class может быть вставлен в файл .jar программы (в конце концов, файлы .jar - это просто файлы .zip), перезаписав предыдущую сломанную версию A.class. Когда программа будет перезапущена, JVM загрузит новую реализацию A.bar (), и класс Example получит новое поведение.

Как и почти все, более сложные программы могут быть, ну, более сложными. Но принципы те же.

2
ответ дан 15 December 2019 в 01:09
поделиться

Рассмотрим игру, в которой было спроектировано несколько независимых модулей, каждый из которых взаимодействует друг с другом только через интерфейсы. Первоначальное развертывание такой игры может состоять из 15 или 20 отдельных файлов jar.

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

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

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какой версии каждой библиотеки требуются. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

Вам нужно скопировать все 15 jar-файлов в систему вашего клиента - вы просто копируете тот, который изменился.

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный xml-файл, чтобы определить, какие версии каждого библиотека обязательны. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

Вам нужно скопировать все 15 jar-файлов в систему вашего клиента - вы просто копируете тот, который изменился.

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какие версии каждого библиотека обязательны. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

s система - вы просто копируете ту, которая изменилась.

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какие версии каждой библиотеки требуются. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

s система - вы просто копируете ту, которая изменилась.

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какие версии каждой библиотеки требуются. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какие версии каждой библиотеки требуются. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

jnlp (из которых Webstart и новая реализация апплета являются примерами) делает это, используя четко определенный файл xml, чтобы определить, какие версии каждой библиотеки требуются. В этом случае первоначальное развертывание приложения может быть выполнено путем чтения xml (обслуживаемого веб-сервером) и динамической загрузки необходимых файлов jar в локальный кеш во время операции начальной загрузки. На самом деле первоначальной установки нет вообще.

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

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

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

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

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

0
ответ дан 15 December 2019 в 01:09
поделиться

In addition to updating individual JAR files (or, in other software environments, shared library files or DLLs), there are binary patch tools that can be used in some cases to transmit a set of changes against the base file. A patch program will take this difference file and merge it with the base file to produce the new, changed file. This only works if the original file is not modified on the installed system, but can work in some cases to incrementally patch particular program components.

0
ответ дан 15 December 2019 в 01:09
поделиться

I'd actually marginally studied this at university, and upon research specifically for it I actually found it quite interesting. One thing to do to specify updates specifically is recorded versioning where for each version that you release you specify what has updated. Say for example the difference between version 1.0.1 and 1.0.2 is that mylib.dll has been updated. Now say that the difference between 1.0.2 and 1.0.4 is that myotherlib.dll has changed then if someone updates their software to the latest version (1.0.4) and they currently have 1.0.1 then both dll's are included in the update.

I'm not sure if this is practiced though or if more intelligient methods are used. It depends on the software maker really, quite a few different methods are used I assume as some developers encrypt application files and bundle them into a custom format.

0
ответ дан 15 December 2019 в 01:09
поделиться

Самый простой способ обновить отдельный класс - это остановить приложение, заменить старый класс новым и перезапустить. В некоторых случаях закрытие приложения может не подходить. Чтобы преодолеть это, вам понадобится какой-то фреймворк / контейнер и разработать собственные загрузчики классов, которые сделают возможным обновление класса без перезапуска. Это то, что делают серверы приложений Java.

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

0
ответ дан 15 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

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