Создание приложения в Java или погружение в неизведанную пещеру

в 18:57, , рубрики: java, дизайн мобильных приложений, разработка мобильных приложений

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

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

Для чего я все это пишу? Хочу делиться своим путем, своими ошибками, своим ходом мыслей в процессе создания приложения. Возможно, кому-то это поможет, кто-то в комментариях поделится чем-то интересным на этот счет, да и в процессе формулирования мыслей пройденное усвоится лучше).

С чего начать?

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

Поэтому я решил немного поменять подход. Теперь я руководствуюсь четырьмя пунктами:

  1. Формулируем цели и понимаем, что нужно на начальном этапе.
    Например, я хочу написать программу-ежедневник. Я хочу, чтобы у меня была полноценное приложение с графикой, а не просто консольное нечто, поэтому мне точно понадобятся всякие окна, панели, кнопки и т.д.
  2. Продвигаемся к цели методом проб и ошибок. Например, я хочу создать окно. Ищу в интернете необходимую библиотеку, подключаю ее, создаю это окно.
    После этого вспоминаем работу с окнами в Windows/Linux и пытаемся сделать это через код. Условно, установить определенный размер и запретить его изменение.
  3. Включаем свою любознательность. Пытаемся переставлять строки местами, менять параметры и запускать после этого программу, подмечать, что поменялось
  4. Пишем комментарии к коду. Вот прям обязательно. Долгое время сам не использовал комментарии, но с ними гораздо удобнее: можно сэкономить много времени, не спрашивая «что здесь вообще происходит», ну и просто немного разгрузить мозг, освободив его «оперативку», записав мысль словами

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

Первый шаг — Окна

Начать я решил именно с графики, а не с написания алгоритмов. Не знаю, насколько это практично, но меня очень тянет к графике.

Тем не менее, еще до того, как я дошел до окон, у меня возник вопрос: можно ли создавать несколько классов внутри одного файла? Не по принципу матрешки (класс в главном классе).
Оказалось, что да.

Основной класс, в котором также содержится main, должен иметь такое же название, как и имя файла. Насколько я понимаю, обычно приложение состоит из многих файлов, поэтому основной класс должен быть открыт для доступа из других фалов, то есть иметь тип public. Остальные же классы создаются без public и private перед ключевым словом class и доступны они только в том файле, в котором их объявили.

Так вот, можно, наконец, перейти к окнам.

Окно в Java обозначается как JFrame. Если переводить на русский, то получится что-то типа «java — окно». Находится окно в библиотеке javax.swing.

Код по созданию нового окна выглядит примерно так:

import javax.swing.JFrame;

public class Car {
     public void main(String[] arg) {
         JFrame new_frame = new JFrame("name of frame");
     }
}

class Bicycle {
}

Что мне очень нравится в Java, так это понятные названия методов. Например, догадайтесь, что делают следующие методы?:

import javax.swing.*;
import java.awt.*;

public class MainWindow {
    public static void main(String[] args) {
        Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
        JFrame main_frame = new JFrame("Новое окно");
        main_frame.setVisible(true);
        int frame_width = 500, frame_height = 300;
        main_frame.setBounds((size.width - frame_width) /2,
                                          (size.height - frame_height)/2,
                                          frame_width, frame_height);
        main_frame.setResizable(false);
    }
}

А вот тот же код с пояснениями:

import javax.swing.*;//* импортирует все объекты, которые есть в библиотеке
import java.awt.*;//нужна для того, чтобы было можно узнать размер экрана

public class MainWindow {
    public static void main(String[] args) {
        Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
        /*узнаем размер экрана,
          возвращает пару значений
          длина-ширина*/

        JFrame main_frame = new JFrame("new window");
        //новое окно с заголовком "new window"

        main_frame.setVisible(true); 
        //метод позволяет визуализировать окно (если флаг true)

        int frame_width = 500, frame_height = 300; 
        //задаем исходные размер нашего окна

        main_frame.setBounds((size.width - frame_width) /2,
                                          (size.height - frame_height)/2,
                                          frame_width, frame_height); 
        /*задает положение окна на экране
           первые два параметра отвечают за
           расположение окна по горизонтали и
           вертикали, а вторые за размеры самого  окна*/

        main_frame.setResizable(false); 
        /*метод фиксирует размер окна, то есть блокирует изменение его размера*/
    }
}

На сегодня это все. Получилось не так много, но, надеюсь, информативно.

Всем желания кодить и хороших компиляторов.

Автор: диванный аналитик

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js