Примерно со старшей школы меня сначала поверхностно, а потом все сильнее и сильнее, стало захватывать программирование. Поначалу это были банальные программки на Паскале, от которого я, впрочем, очень скоро отказался в пользу плюсов. Постепенно мой интерес нарастал и я стал прорешивать полуолимпиадные-полуобучающие задачки с применением различных довольно простеньких алгоритмов по типу бинарного поиска или обхода в глубину с некоторыми модификациями.
Примерно в это же время у меня возникла идея создать свое приложение для организации своего времени: условный прототип ежедневника. Да, довольно простенькая идея, но все же. Тогда у меня так и не дошли руки до написания программы. Зато дошли сейчас.
Так вот. Для написания этого самого приложения я решил изучить язык Java. Несмотря на то, что у меня к нему есть некое предубеждение (когда-то давно я начинал его учить и мне показалось, что в нем слишком длинные и непонятные названия методов, да и вообще все сложно), потребность в кроссплатформенности (почему бы приложение не запускать еще и на ПК без лишних приседаний?) вернула меня на путь изучения Java.
Для чего я все это пишу? Хочу делиться своим путем, своими ошибками, своим ходом мыслей в процессе создания приложения. Возможно, кому-то это поможет, кто-то в комментариях поделится чем-то интересным на этот счет, да и в процессе формулирования мыслей пройденное усвоится лучше).
С чего начать?
Лично мне очень тяжело было изучать C++ по книгам. Во многом потому, что я получал большой объем теории, но почти никак не подкреплял это написанием программ. Во многом потому, что просто не понимал, где это все мне может пригодиться. В результате куча времени была потрачена, а большая часть инфы в голове так и не засела.
Поэтому я решил немного поменять подход. Теперь я руководствуюсь четырьмя пунктами:
Формулируем цели и понимаем, что нужно на начальном этапе.
Например, я хочу написать программу-ежедневник. Я хочу, чтобы у меня была полноценное приложение с графикой, а не просто консольное нечто, поэтому мне точно понадобятся всякие окна, панели, кнопки и т.д.
Продвигаемся к цели методом проб и ошибок. Например, я хочу создать окно. Ищу в интернете необходимую библиотеку, подключаю ее, создаю это окно.
После этого вспоминаем работу с окнами в Windows/Linux и пытаемся сделать это через код. Условно, установить определенный размер и запретить его изменение.
Включаем свою любознательность. Пытаемся переставлять строки местами, менять параметры и запускать после этого программу, подмечать, что поменялось
Пишем комментарии к коду. Вот прям обязательно. Долгое время сам не использовал комментарии, но с ними гораздо удобнее: можно сэкономить много времени, не спрашивая «что здесь вообще происходит», ну и просто немного разгрузить мозг, освободив его «оперативку», записав мысль словами
Через практику, особенно интересную, и визуальное восприятие суть всяких функций, их устройство и прочие фичи усваиваются лучше. Поэтому придумайте действительно интересную вам(!) и, возможно, полезную уже сейчас программу и познавайте язык в процессе ее написания.
Первый шаг — Окна
Начать я решил именно с графики, а не с написания алгоритмов. Не знаю, насколько это практично, но меня к ней очень тянет.
Тем не менее, еще до того, как я дошел до окон, у меня возник вопрос: можно ли создавать несколько классов внутри одного файла? Не по принципу матрешки (класс в главном классе).
Оказалось, что да.
Основной класс, в котором также содержится 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("new window");
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);
/*метод фиксирует размер окна, то есть блокирует изменение его размера*/
}
}
На сегодня это все. Получилось не так много, но, надеюсь, информативно.