Я новичок в java, и не совсем понимаю суть её переносимости. Мое первоначальное предположение о том, что можно написать программу ОДИН РАЗ и запускать её хоть на windows, хоть на android, как я понимаю, в корне неверно. Для винды нужен JavaFX, для android - Android Studio и т.д. Так получается, под переносимостью java подразумевают просто ВОЗМОЖНОСТЬ создания программ под разные платформы, а не единство кода для всех пользовательских устройств? Буду рад получить любое разъяснение этого вопроса. Заранее спасибо за фидбек. 🙃
hidden #3323867
21 уровень
Кроссплатформенное приложение на java. Нужно кое-что разъяснить.
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
17 июля 2023, 17:55
Я не работал с Андроид, немного с JavaFX но я расскажу как я вижу "мультиплатформенность".
Есть Java программа, допустим:
И есть JRE под каждую платформу - Виндовс, Макос, Линукс, Андроид и тд.
JRE имеет компилятор и JVM.
Компилятор берет .java файл и превращает его в байткод.
JVM знает как конкретный байткод выполнить в условиях конкретной операционной системы.
Поэтому, в каком-то роде переносимость есть, программист пишет программу на Виндовсе, а код выполняется на линуксе или макосе. Или андроиде.
Это кстати обычное дело, более половины джава разраотчиков работают на Винде, процентов 30-40 Макос, процентов 10 различные варианты линукса.
При этом их программы работают как правило на линуксоподобных системах.
Но ты затрагиваешь еще вопрос конкретной платформы, но это "вы не понимаете, это другое (с)".
Представь что ты пишешь программу кальулятор консольный, с клавиатуры пользователь вводит два числа и операцию, и получает результат.
И ты при этом говоришь "джава не имеет единства кода для всех устройств, я не могу этот же калькулятор без доработок просто запустить на Планшете, Смартчасах или Веб-страничке.
Но здесь же каждая платформа в принципе имеет свои особенности, свою апи и тд.
То есть если ты напишешь System.out.println скорее всего оно выведет так или иначе на всех платформах, но если ты работаешь с интерфейсом, средствами ввода, окнами, которые на каждой платформе свои...ну, тут же нужно учитывать.
Представь двигатель как универсальный агрегат автомобиля, который по сути используется в разных моделях. Но это не значит что 12 цилиндровый двигатель мощный можно вставить в какую-то Оку и ожидать, что Ока будет ехать 300 км/ч.
Нужны доработки, ходовая, трансмиссия и тд, но это не делает двигатель "не универсальным агрегатом, который нельзя вставить в другой автомобиль". +1
Justinian Judge в Mega City One Master
17 июля 2023, 18:06
просто есть нюансы, если есть БМВ то ты сможешь легко без существенных изменений вставить двигатель с одной модели в другую, если это одноплатформенные и сородичи.
А вот на другую платформу или марку, могут понадобится доработки.
Так и джава программы, программу
ты можешь вставить куда угодно, оно отработает везде, где есть JVM.
Но если ты хочешь чтобы программа, работающая под Винду и 24 дюймовый интерфейс винды просто взяла и отработала на 6-дюймовом сенсорном дисплее обыграв все свайпы и приколы мобильных устройств, ну оно так не сработает.
Программу под JavaFX десктоп в принципе можно запустить на андроиде.
Но каждая платформа имеет особенности, поэтому мобильное приложение обычно разрабатывается отдельно, да, часто можно много переиспользовать. Но какие-то фишки нужно переписать по другому, если ты работаешь именно с платформенно-зависимым функционалом, как например тот же ГУИ.
Кроссплатформенность изначально закладывалась как ттвое первоначальное понимание.
Но потом и мир изменился, и джава и ее целевая аудитория, со скриптом для холодильников и микроволновок превратилась в язык энтерпрайза.
Поэтому, мобайл это отдельное направление, IoT это отдельное направление, а вот разные платформы десктопа - это одно направление, поскольку несмотря на отличия имеют одинаковый концепт в части взаимодействия с пользователем.
Ну и графическая часть это тоже отдельное направление, JavaFX/Swing/Desktop GUI, это меньше 10% использования джавы и этот процент уменьшается в принципе, идет миграция в клауд и другие решения.
А вот на мобайле, джава и котлин живут себе, но там своя атмосфера по проектам, технологиям, другие принципы написания кода и архитектуры приложений.
Поэтому для меня это несвязные немного вещи, отдельно есть мульти-платформенность которую можно обсуждать, отдельно портирование широкого диапазона функционала на разные платформы. +1
Денис Enterprise Java Developer
17 июля 2023, 18:14
Проблемы UIщиков) Если говорить строго о бекэнде, то кодовая база будет более-менее идентичной как мне кажется. Java машина берет на себя все проблемы по работе с системой и если там нет какого ни будь
То все должно быть ок.
Как мне кажется львиная доля рынка джавки это именно бекэнд и логика, так что проблемы с UI/UX, и прочими графическими приблудами обходят нас стороной.
С другой стороны, если целью стоит именно десктопное приложение, тут есть смысл подумать о других инструментах, не джавке. +1
hidden #3323867
17 июля 2023, 18:17
Спасибо за подробный ответ. 🙂🤝
0