Как создать примитивную программу

Java-университет

Кофе-брейк #165. Пакеты на языке Java. Потокобезопасные методы для начинающих - 1

Источник: Usemynotes Эта публикация поможет вам лучше изучить пакеты в Java, понять их предназначение и способы реализации.

Что такое пакеты в Java

Пакет (Package) в Java — это способ объединить группу классов, интерфейсов и подпакетов. С помощью пакетов создаются группы связанных классов, интерфейсов, перечислений и так далее. Подпакеты — это пакеты, находящиеся в другом пакете. Они не импортируются по умолчанию, но при необходимости их можно импортировать вручную. Спецификация доступа не предоставляется отдельным членам подпакета, они рассматриваются как разные пакеты.

Некоторые виды пакетов в Java:

  • java.lang — по умолчанию поставляется в комплекте с Java.
  • java.io — содержит классы, методы и другие элементы, связанные с вводом-выводом.

Зачем нужны пакеты?

  • Во избежание конфликтов имен.
  • Для обеспечения контролируемого доступа.
  • Чтобы добиться инкапсуляции данных.

Как создать пакет в Java?

Давайте создадим пакет с именем computer . Обычно имя пакета пишется строчными буквами. Это делается только для того, чтобы избежать конфликтов имен с именами классов. Также мы создадим интерфейс с именем Pluggable , который будет находиться в пакете computer .

С чего начать делать игры | Разработка для новичков


package computer; interface Pluggable
Теперь мы создадим класс с именем PenDrive , который будет реализовывать вышеуказанный интерфейс.
package computer; public class PenDrive implements Pluggable < int storage = 64; public void pluggedIn () < System.out.println(«Pen Drive is connected»); >public void pluggedOut () < System.out.println(«Pen Drive is removed»); >public int storage() < return storage; >public static void main(String args[]) < PenDrive p = new PenDrive (); p.pluggedIn(); System.out.println(«Pen Drive Storage: » + p.storage()); p.pluggedOut(); >>

Как создать иерархию пакетов в Java?

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

Давайте рассмотрим пакет с именем Asia.India.Kolkata . Все это существующие папки, но если учесть географию, то понятно, что Калькутта находится в Индии, а Индия находится в Азии. Основной цель иерархии — облегчить поиск классов.

Типы пакетов в Java

Встроенные пакеты (Built-in Packages)

  • java.util — этот пакет содержит конечное количество служебных классов, которые используются для реализации структур данных, таких как связанный список, наборы и так далее. Он также поддерживает операции с датой и временем и многое другое.
  • java.net — он содержит классы, используемые для сетевых операций.

Пользовательские пакеты (User-defined packages)

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

Как создать программу для Windows? Как стать программистом?

Как получить доступ к пакету из другого пакета?

  • Использование звездочки в операторе импорта

import tools.*;

  • Использование импорта package.ClassName;

import book.Pages;

  • Использование полного имени

java.awt.List aSimpleList = new java.awt.List();

Размер пакета по умолчанию в Java

По умолчанию Java импортирует пакет java.lang . Он имеет много классов, которые обычно используются в простых программах Java, таких как String , Integer и других. Одним из наиболее важных классов является класс Object , который, в свою очередь, также находится в пакете java.lang . Размер этого пакета основан на его составляющих: 8 интерфейсов, 37 классов, 3 перечисления, 27 исключений, 23 типа ошибок и 5 типов аннотаций.

Читайте также:
Программа для того чтобы зайти в рекавери

Потокобезопасные методы Java для начинающих

Кофе-брейк #165. Пакеты на языке Java. Потокобезопасные методы для начинающих - 2

Источник: Medium Используя эту статью, вы сможете узнать о работе потокобезопасных методов в Java. Я обнаружил, что многие junior/middle Java-разработчики неправильно понимают, как должны работать потокобезопасные (thread-safety) методы в реальных проектах. А поскольку мы обычно работаем в многопоточной среде, то правильное их использование очень важно.

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

Пример №1:

public static int countLetters(String input) < int counter = 0; for (Character c : input.toCharArray()) < if (Character.isAlphabetic(c)) < counter++; >> return counter; >

  • Метод countLetters является статическим, он возвращает значение int и принимает ввод строкового параметра.
  • Внутри метода создается примитивный счетчик переменных, затем цикл перебирает символы входной строки и увеличивает счетчик переменных каждый раз, когда встречается буквенный символ.

Пример №2:

public static int countLetters2(String input) < ListlistCounter = new ArrayList<>(); for (Character c : input.toCharArray()) < if (Character.isAlphabetic(c)) < listCounter.add(c); >> return listCounter.size(); >

В этом коде использовалась та же логика, что и в первом примере, но здесь вместо примитивной переменной int использовался объект List . Из предыдущей части мы знаем, что объекты в Java хранятся в куче, а List — это объект. Также мы знаем, что стек хранит ссылки на объекты в куче. В примере №2 каждый поток создает новый объект ArrayList : а переменная listCounter хранит ссылку на свой объект в куче, поэтому никакой другой поток не может изменить этот объект.

List listCounter = new ArrayList<>();
Это означает, что этот метод является потокобезопасным.

Пример №3:

public class CounterUtil < // singleton ListlistCounter = new ArrayList<>(); public int countLetters3(String input) < for (Character c : input.toCharArray()) < if (Character.isAlphabetic(c)) < listCounter.add(c); >> return listCounter.size(); > >

В этом примере у нас есть одноэлементный (это важно) класс CounterUtil с глобальной переменной listCounter . Эта переменная создается одновременно с экземпляром синглтона. Когда несколько потоков вызывают метод countChars3 , все они используют одну и ту же глобальную переменную listCounter , которая сохраняет ссылку на один и тот же объект в куче, и потоки там будут влиять друг на друга. Поэтому мы можем сделать вывод, что этот метод не является потокобезопасным. И даже если мы поменяем List listCounter на примитивную переменную int counter , это также не будет потокобезопасным, потому что все потоки будут использовать одну и ту же примитивную переменную.

Последний пример:

public static int countLetters4(List inputList) < ListlistCounter = new ArrayList<>(); for (Character c : inputList) < if (Character.isAlphabetic(c)) < listCounter.add(c); >> return listCounter.size(); >

Метод countLetters4 принимает список символов вместо параметра String . Здесь мы не можем гарантировать , что этот метод является потокобезопасным. Почему? Потому что мы не можем быть уверены, как разработчики будут использовать этот метод. Если другой поток извне изменит данные в inputList одновременно с нашим методом counterLetters4 , это может повлиять на окончательный результат.

Создание примитивного Telegram-бота

  1. Программа для бота будет написана на Python, поэтому для начала его нужно скачать на официальном сайте, если у вас его нет, а если есть, то можно переходить к шагу №6.
  2. Нажимаем на желтую кнопку Download Python, после ждем скачивания.
Читайте также:
Как отключить автозагрузку дискорд в самой программе

3. Теперь переходим к установке самого Python.

4. В окне установщика Python обязательно установите флажок на «Add Python X.Y to PATH», в противном случае у вас будут проблемы с доступом интерпретатора Python к командной стоке.

5. После нажимаем Install Now и ждем установки. Все, Python установлен на ваш компьютер.

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

7. Для этого откроем командную строку. Если у вас операционная система windows, то это можно сделать так:
Нажимаем сочетание клавиш win+r.

В открывшемся окне написать cmd и нажать «OK».

Откроется командная строка и в ней нужно написать:

pip install pytelegrambotapi

Теперь просто нажимаем Enter и ждем установки библиотеки, где-то 1 минуту, может больше, зависит от вашего интернет соединения.

Если при вводе команды вам выдало ошибку «pip» не является внутренней или внешней командой, исполняемой программой или пакетным файлом, значит при установке python вы не установили pip.

В таком случае, попробуйте переустановить Python. Для этого откройте снова установщик и нажмите Uninstall.

Снова откройте установщик и пройдитесь по шагам 3 — 5.

Если все еще не получается установить библиотеку, то попробуйте способ, который представлен на этом сайте, начиная с заголовка «Как установить pip» — *клик*.

8. Теперь все готово для написания программы, но сначала нам нужно зарегистрировать бота в Telegram.

II этап. Регистрация бота.

III этап. Написание программы.

  1. Теперь нужно открыть IDLE Python, ну или любой удобный компилятор для кода, который работает с Python, инструкция будет именно по стандартному IDLE Python, но ее можно использовать везде.

2. В открывшемся окне нажимаем вкладку File и в ней New File.

import telebot bot = telebot.TeleBot(‘Сюда токен бота’)

Главное скопировать его полностью и вставить в кавычки.

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

5. Для начала нам нужны переменные, в которые будут записываться данные.

name = » surname = » age = 0

6. Объявим метод для старта и получения текстовых сообщений:

7. В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки.

8. Добавим в наш метод немного функционала:

  • Если пользователь напишет нам «Привет», то скажем ему «Привет, хочешь ввести свои данные? Напиши /reg»;
  • При написании команды «/help» скажем пользователю написать «Привет или /reg»;
  • А команда «/reg» начнет запись пользователя с имени.
  • При отсутствии ключевых слов, которые мы задали, а это «Привет», «/reg» и «/help», бот нам отправит сообщение об ошибке и просьбе ввести «/help».

*/reg — ключевое слово для того, чтобы начать регистрацию.

Главное написать это все внутри метода и соблюдая табуляцию (отступ от начала строки) для того, чтобы Python смог скомпилировать наш код.

Если запустить программу (нужно нажать на вкладку Run и в ней Run module), нас сначала спросят сохранить ли программу, нужно нажать save, и сохранить в удобное для вас место под удобным названием.

После запуска, можно попробовать написать какое-нибудь из наших ключевых слов, но бот никак не отреагирует, потому что нужно написать еще одну строчку кода вне нашего метода:

Читайте также:
В какой программе делать проект отопления

bot.polling(none_stop=True, interval=0)

Теперь наш бот будет спрашивать у серверов Telegram «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Telegram передаст ему наше сообщение. Снова нажимаем на run module и сохраняем наш код.

Программа запущена, т.к. открыто новое окно Python.

Сейчас можно написать в бота что-нибудь и он нам ответит, но «/reg» работать не будет и, скорее всего, наша программа выдаст ошибку при отправке сообщения «/reg» нашему боту, потому что, если мы пишем ему эту команду, то она вызывает другой метод, которого у нас нет. Нужно его прописать.

9. Пропишем метод get_name, который будет записывать в переменную ваше имя и после спрашивать фамилию:

def get_name(message): »’Получение имени»’ global name name = message.text bot.send_message(message.from_user.id, «Какая у тебя фамилия?») bot.register_next_step_handler(message, get_surname)

10. Пропишем метод get_surname, который будет записывать в переменную вашу фамилию и после спрашивать возраст:

def get_surname(message): »’Получение фамилии»’ global surname surname = message.text bot.send_message(message.from_user.id, «Сколько тебе лет?») bot.register_next_step_handler(message, get_age)

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

def get_age(message): »’Получение возраста»’ global age try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, ‘Цифрами, пожалуйста’) bot.register_next_step_handler(message, get_age) return

Теперь у нас есть 3 метода, которые записывают ваши данные в переменные, но нужно сделать так, чтобы это все выводилось пользователю, а также можно реализовать выбор пользователем: правильно ли он ввел данные и если нет, то он должен заново все ввести без ошибок.

12. Запросим у пользователя подтверждение того, что все введено верно, с помощью кнопок. Для этого немного отредактируем код метода get_age, а точнее добавим несколько строк:

def get_age(message): »’Получение возраста»’ global age try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, ‘Цифрами, пожалуйста’) bot.register_next_step_handler(message, get_age) return keyboard = types.InlineKeyboardMarkup() #наша клавиатура key_yes = types.InlineKeyboardButton(text=’Да’, callback_data=’yes’) #кнопка «Да» key_no= types.InlineKeyboardButton(text=’Нет’, callback_data=’no’) #кнопка «Нет» keyboard.add(key_yes) #добавляем кнопку в клавиатуру keyboard.add(key_no) question = f’Тебя зовут и тебе лет?’ bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)

13. И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:

14. Также, нужно дописать в начало нашего кода строчку:

from telebot import types

15. Осталось только переместить одну строку кода в конец вне всех методов, а именно:

bot.polling(none_stop=True, interval=0)

Эта строка должна быть только в конце кода.

16. Все, теперь можно снова нажимать run module, сохранять нашу программу и после запуска наш бот будет обладать примерно таким функционалом:

17. Теперь можно закрыть IDLE. Но чтобы снова была возможность запустить бота, то нужно перейти к расположению сохраненного вами файла и дописать к нему в названии .py, чтобы можно было при двойном нажатии запустить бота.

Также можно расширять функционал этого бота, по вашему желанию, и для того, чтобы снова зайти в IDLE, нужно нажать правой кнопкой мыши по файлу и выбрать «Edit with IDLE».

Удачи вам и надеюсь, что у вас все получилось, и в дальнейшем вы сможете развить вашего бота до уровня PC Control.

Готовый код программы:

Источник: telegra.ph

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru