Аппаратное обеспечение, совокупность электронных и механических частей вычислительного устройства. Абстрактную вычислительную систему можно представить как:
- процессор, основной элемент любой вычислительной системы, выполняет команды (операции) над данными;
- память, служит для хранения данных (оперативного и долговременного хранения);
- устройства ввода, служат для ввода данных и управления;
- устройства вывода, для вывода (передачи) информации.
Программное обеспечение - совокупность инструкций и данных, позволяющая аппаратному обеспечению выполнять вычислительные функции (операции).
Этапы развития разработки программного обеспечения:
- Первые программы писали в виде машинных кодов - команд, которые способен выполнять процессор.
- Первыми языками программирования были языки класса «ассемблер», являющиеся языками специфичными для конкретной архитектуры вычислительной системы.
- Первые языки программирования высокого уровня были процедурные (императивная парадигма), программа организуется в виде последовательности подпрограмм (процедур). К этому классу языков относятся: FORTRAN (1954-57), ALGOL(1960-68), BASIC(1964), PASCAL(1970), С (1972).
- Дальнейшее развитие языков программирования привело к созданию объектно-ориентированной парадигмы программирования. Концепция ООП: представление программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса. Классы могут образовывать иерархию наследования, один объект расширяет (или переопределяет) свойства и поведение объекта родителя. К первым языкам данного класса относятся: SIMULA (1967), Smalltalk (1969-1980), C++ (1983).
Этапы генерации программы.
- Компиляция – процесс перевода (трансляции) программы из исходного текста в исполняемый код процессора.
- Компиляция в машинный код. Упрощенная схема:
Исходный код → Машинный код
Проблема переносимости: программы создаваемы по схемы представленной выше, ориентированы на работу в конкретной среде и на конкретной архитектуре аппаратного обеспечения.
- Виртуальная машина. Концепция программной оболочки эмулирующей аппаратное обеспечение некоторой платформы. Виртуальная машина исполняет некоторый машинно-независимый код (байт-код, p-код). Таким образом, программы, созданные для исполнения на вириальной машине, не зависят от аппаратного обеспечения вычислительной системы и окружения (ОС). Упрощенная схема:
Исходный код → байт-код → Машинный код
- В 1990 году в компании Sun Microsystems зародился проект — Oak. Идеологом языка был Джеймс Гослинг.
В основу его разработки заложены концепции:
- переносимости кода;
- объектно-ориентированного программирования;
- си подобный синтаксис.
Язык планировался для разработки приложений для микроконтроллеров. В 1996 году была представлена первая версия языка Java.
- JDK 1.0 — 1996г.
- JDK 1.1 — 1997г.
- J2SE 1.2 — 1998г.
- J2SE 1.3 — 2000г.
- J2SE 1.4 — 2002г.
- J2SE 5.0 — 2004г.
- Java SE 6 — 2006г.
- Java SE 7 — 2011г.
- Java SE 8 — 2014г.
- Java SE 9 — 2017г.
- ...
- Java SE 11 — 2018.
- ...
- Java SE 17 — 2021.
- 1996 (JDK 1.0) — выпуск первой версии Java.
- 2004 (J2SE 5.0) — в язык Java были добавлены: перечисляемы типы (enum), аннотации (возможность добавлять в текст программы метаданные, влияющие на исполнение кода), средства обобщённого программирования (generics), цикл foreach для коллекции объектов, и др.
- 2014 (Java SE 8) - в язык Java были добавлены: поддержка лямбда-выражений, потоки (stream api) для работы с коллекциями, ссылки на методы и конструкторы и др.
JVM виртуальная машина Java — основная часть исполняющей системы Java. Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac).
Для разработки программа на языке Java используют комплект разработчика приложений на языке Java — JDK (Java Development Kit), включающий в себя компилятор Java (javac), стандартные библиотеки классов Java.
- .java – текстовый файл непосредственно с java-кодом;
- .class – файл, получаемый на выходе процесса компиляции из java-кода в байт-код;
- .jar – пакет .class-файлов, готовый к компиляции в низкий код (исполнению на JVM).
Метод main() должен быть открытым (public) и статическим (static); он должен получать в аргументе массив объектов String (String[] args) и не возвращать никакого значения (void):
public static void main (String[] myArgs)
Горячие клавиши в intellij IDEA
psvm +
Tab
/Enter
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Введите имя: ");
String name = in.nextLine();
System.out.println("Привет " + name + "!");
}
}
Output:
Введите имя:
Иван
Привет Иван!
В примере программа состоит из: Класса Test, с методом main, внутри которого выполняется вызов метода println для вывода тестовой строки в стандартный поток вывода (консоль) и метод nextLine() у класса Scanner для ввода строки через консоль.
1.1 Целочисленные типы
Тип | Размерность |
---|---|
byte | 8 бит от -128 до 127 |
short | 16 бит от -32768 до 32767 |
char | 16 бит символ UTF-16 (буквы и цифры) |
int | 32 бит от -2147483648 до 2147483647 |
long | 64 бит от - 9223372036854775808 до 9223372036854775807 |
1.2 Типы с плавающей точкой
Тип | Размерность |
---|---|
float | 32 от -1.4e-45f до 3.4e+38f |
double | 64 от -4.9e-324 до 1.7e+ |
1.3 Логический тип
Тип | Значение |
---|---|
boolean | true (истина) или false (ложь) |
Это все остальные типы: классы, перечисления и интерфейсы, а также массивы.
Это объекты класса String, в некоторых случаях обрабатываются отлично от всех остальных объектов. Строковые литералы записываются в двойных кавычках.
String name="Бенедикт Камбербэтч";
Важно!
Не сравнивайте с помощью оператора сравнения (==)!
String name1 = "Иван";
String name2 = "Иван";
String name3 = new String("Иван");;
System.out.println(name1 == name2); // true
System.out.println(name1 == name3); // false
System.out.println(name1.equals(name2)); // true
System.out.println(name1.equals(name3)); // true
int[]array1 = new int[10]; // Массив из 10 нулей
int[]array2 = {1, 2, 3}; // Массив [1, 2, 3]
int[][]array3 = new int[5][5]; // Двумерный массив 5x5 заполненный нулями
int[][]array4 = {{1, 2}, {3, 4}, {5, 6}}; // Двумерный массив 3x3 заполненный заданными значениями.
Общая схема: тип данных имя переменной [ = значение]
public class Test {
byte b = 64;
short s = 1024;
char c = 'C';
int i = 2048;
long l = 4194304;
boolean bv = true;
double f = 1.2;
String name = "James Gosling";
Состоит из логического выражения, после которого следует один или более операторов. Может сопровождаться дополнительным оператором else, который выполняется при ложном логическом выражении.
if (Логическое выражение) {
// Выполняется, если истинно
} else {
// Выполняется, если ложно
}
Тренарный оператор - сокращенная форма if - else
<условие> ? <значение, если true> : <значение, если false>
Пример:
String result = age >= 18 ? "Все в порядке, проходите!" :"Этот фильм не подходит для вашего возраста!";
Проверяет переменную на равенство в отношении списка значений.
switch (выражение) {
case значение:
// Операторы
break; // необязательно
case значение2:
// Операторы
break; // необязательно
// Вы можете иметь любое количество операторов case.
default: // необязательно
// Операторы
}
switch (выражение) {
case значение -> // операторы
case значение2 -> {
// операторы
}
default: -> // операторы
}
Обладает структурой управления повторений, что позволяет эффективно написать цикл, который должен выполниться определенное количество раз.
for (иници-я; логическое_выражение; обновление) {
// Операторы
}
Многократно выполняет цель оператора до тех пор, пока данное условие верно.
while (Логическое выражение) {
// Операторы
}
Похож на цикл while, отличие, что цикл do-while гарантированно выполнится, по крайней мере один раз.
do {
// Операторы
} while (логическое выражение);
if (x < y) { // начало блока
x = y;
y = 0;
} // конец блока
for (x = 0; x < 10; x++) { // начало блока
System.out.println("Значение x: " + x);
System.out.println("Значение y: " + y);
y = y - 2;
} // конец блока
Оператор | Значение |
---|---|
+ | Сложение |
- | Вычитание |
* | Умножение |
/ | Деление |
% | Деление по модулю |
++ | Инкремент |
+= | Сложение с присваиванием |
-= | Вычитание с присваиванием |
*= | Умножение с присваиванием |
/= | Деление с присваиванием |
%= | Деление по модулю с присваиванием |
-- | Декремент |
Оператор | Значение |
---|---|
== | Равно |
!= | Не равно |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
Оператор | Значение |
---|---|
&& | Логическое И |
|| | Логическое ИЛИ |
! | Логическое НЕ |
& | Побитовое И |
| | Побитовое ИЛИ |
^ | Побитовое исключающее ИЛИ |
~ | Побитовое НЕ |
Язык Java поддерживает однострочные и многострочные комментарии, они очень похожи на используемые в С/С++. Все символы недоступны внутри любых комментариев и игнорируются компилятором.
/**
* Это многострочный
* комментарий.
*/
// Это однострочный комментарий