сегодня будет очень много текста 🥶
постарался все расписать и объяснить, если вам такое не зайдет, будет что то по легче
но я думаю вам зайдет, и вы все поймете, там примеры из жизни где применяется, и в коде, +примеры как делать и что получится
постарался все расписать и объяснить, если вам такое не зайдет, будет что то по легче
но я думаю вам зайдет, и вы все поймете, там примеры из жизни где применяется, и в коде, +примеры как делать и что получится
⌛️ 12:00 мск как обычно(в это время всегда пост)
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Абстракция?
Как вы правильно заметили, абстракция – это процесс выделения существенных характеристик объекта или системы, игнорируя при этом детали реализации. Это позволяет нам упростить сложность, фокусируясь на том, что делает объект, а не на том, как он это делает.
📺 Телевизор: Вам не нужно знать, как работает внутренняя электроника телевизора, чтобы использовать его. У вас есть пульт дистанционного управления с кнопками для включения/выключения, изменения громкости и переключения каналов. Это абстракция - вы взаимодействуете с телевизором через простой интерфейс, скрывающий сложность реализации.
🏧 Банкомат (ATM): Вы вставляете карту, вводите PIN-код и выбираете операцию (например, снятие наличных). Вам не нужно знать, как банкомат связывается с вашим банком, как проверяется ваш баланс или как выдаются деньги. Это все скрыто от вас.
🖥 Веб-браузер: Вы вводите URL-адрес и видите веб-страницу. Браузер выполняет множество действий (DNS-запросы, установление TCP-соединения, загрузка HTML, CSS и JavaScript, рендеринг страницы), но вам не нужно об этом беспокоиться.
В Java абстракция достигается в основном с помощью:
1. Абстрактных классов и методов: Абстрактные классы не могут быть инстанцированы (нельзя создать объект напрямую). Они предназначены для того, чтобы быть унаследованными. Абстрактные методы не имеют реализации в абстрактном классе. Подклассы должны предоставить реализацию для всех абстрактных методов.
2. Интерфейсов: Интерфейсы определяют контракт, которому должны следовать классы, реализующие этот интерфейс. Все методы в интерфейсе по умолчанию являются абстрактными (до Java 8). Интерфейсы обеспечивают множественное наследование типов (класс может реализовывать несколько интерфейсов).
🤍 пример кода. смотрите приложеные фото
Shape (Абстрактный класс):
Определяет общие характеристики для всех фигур (цвет).
Содержит абстрактный метод
Содержит неабстрактный метод
`Circle`, `Rectangle`, `Square` (Классы):
Являются конкретными классами, которые наследуют
Реализуют абстрактный метод
`Drawable` (Интерфейс):
Определяет контракт для всех объектов, которые могут быть нарисованы.
Содержит абстрактный метод
`Square` (Класс, реализующий интерфейс):
Реализует интерфейс
⭐ Упрощение: Уменьшает сложность системы, скрывая ненужные детали.
⭐ Модульность: Разбивает систему на отдельные, независимые модули.
⭐ Гибкость: Позволяет легко изменять реализацию, не затрагивая код, который использует абстракцию.
⭐ Переиспользование кода: Общие характеристики выносятся в абстрактные классы, что позволяет избежать дублирования кода.
Абстрактные классы: Используйте, когда есть общие характеристики и поведение, которые должны быть у всех подклассов. Также, если вы хотите предоставить частичную реализацию (не все методы абстрактные). Абстрактные классы могут содержать поля (переменные экземпляра).
Интерфейсы: Используйте, когда вы хотите определить контракт, которому должны следовать классы. Интерфейсы подходят для определения "возможностей" (например,
📱 krosovok programs
Как вы правильно заметили, абстракция – это процесс выделения существенных характеристик объекта или системы, игнорируя при этом детали реализации. Это позволяет нам упростить сложность, фокусируясь на том, что делает объект, а не на том, как он это делает.
Примеры Абстракции в Реальной Жизни:
🏧 Банкомат (ATM): Вы вставляете карту, вводите PIN-код и выбираете операцию (например, снятие наличных). Вам не нужно знать, как банкомат связывается с вашим банком, как проверяется ваш баланс или как выдаются деньги. Это все скрыто от вас.
👩💻 Абстракция в Java:
В Java абстракция достигается в основном с помощью:
1. Абстрактных классов и методов: Абстрактные классы не могут быть инстанцированы (нельзя создать объект напрямую). Они предназначены для того, чтобы быть унаследованными. Абстрактные методы не имеют реализации в абстрактном классе. Подклассы должны предоставить реализацию для всех абстрактных методов.
2. Интерфейсов: Интерфейсы определяют контракт, которому должны следовать классы, реализующие этот интерфейс. Все методы в интерфейсе по умолчанию являются абстрактными (до Java 8). Интерфейсы обеспечивают множественное наследование типов (класс может реализовывать несколько интерфейсов).
Объяснение кода:
Shape (Абстрактный класс):
Определяет общие характеристики для всех фигур (цвет).
Содержит абстрактный метод
calculateArea(), который должен быть реализован в подклассах. Это заставляет каждый подкласс (Circle, Rectangle) предоставлять свою собственную логику расчета площади.Содержит неабстрактный метод
getColor(), который может быть использован подклассами как есть или переопределен (хотя в данном примере он не переопределяется).`Circle`, `Rectangle`, `Square` (Классы):
Являются конкретными классами, которые наследуют
Shape.Реализуют абстрактный метод
calculateArea(), предоставляя специфическую логику для расчета площади каждой фигуры.`Drawable` (Интерфейс):
Определяет контракт для всех объектов, которые могут быть нарисованы.
Содержит абстрактный метод
draw().`Square` (Класс, реализующий интерфейс):
Реализует интерфейс
Drawable, предоставляя реализацию метода draw().Преимущества Абстракции:
Когда использовать Абстрактные классы и Интерфейсы?
Абстрактные классы: Используйте, когда есть общие характеристики и поведение, которые должны быть у всех подклассов. Также, если вы хотите предоставить частичную реализацию (не все методы абстрактные). Абстрактные классы могут содержать поля (переменные экземпляра).
Интерфейсы: Используйте, когда вы хотите определить контракт, которому должны следовать классы. Интерфейсы подходят для определения "возможностей" (например,
Serializable, Comparable, Runnable). Интерфейсы не могут содержать состояние (поля экземпляра). До Java 8, интерфейсы не могли содержать реализацию (только абстрактные методы). Начиная с Java 8, интерфейсы могут содержать default методы (с реализацией) и статические методы.Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли считать Final переменную константой?
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
📱 krosovok programs
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ThreadLocal-переменная?
У каждого потока - т.е. экземпляра класса
Например, если мы объявим
Следует обратить внимание, что
Так же важно отметить, что т.к.
📱 krosovok programs
ThreadLocal - класс, позволяющий имея одну переменную, иметь различное её значение для каждого из потоков.У каждого потока - т.е. экземпляра класса
Thread - есть ассоциированная с ним таблица ThreadLocal-переменных. Ключами таблицы являются cсылки на объекты класса ThreadLocal, а значениями - ссылки на объекты, «захваченные» ThreadLocal-переменными, т.е. ThreadLocal-переменные отличаются от обычных переменных тем, что у каждого потока свой собственный, индивидуально инициализируемый экземпляр переменной. Доступ к значению можно получить через методы get() или set().Например, если мы объявим
ThreadLocal-переменную: ThreadLocal<Object> locals = new ThreadLocal<Object>();. А затем, в потоке, сделаем locals.set(myObject), то ключом таблицы будет ссылка на объект locals, а значением - ссылка на объект myObject. При этом для другого потока существует возможность «положить» внутрь locals другое значение.Следует обратить внимание, что
ThreadLocal изолирует именно ссылки на объекты, а не сами объекты. Если изолированные внутри потоков ссылки ведут на один и тот же объект, то возможны коллизии.Так же важно отметить, что т.к.
ThreadLocal-переменные изолированы в потоках, то инициализация такой переменной должна происходить в том же потоке, в котором она будет использоваться. Ошибкой является инициализация такой переменной (вызов метода set()) в главном потоке приложения, потому как в данном случае значение, переданное в методе set(), будет «захвачено» для главного потока, и при вызове метода get() в целевом потоке будет возвращен null.Я хочу показать вам разные фишки и техники, которые можно использовать при написании кода. Не буду говорить, что вот это – "правильно", а вот это – "нет". Что-то работает лучше, что-то хуже, всё зависит от ситуации. Главное, что я хочу донести – это то, что так делать можно. А уж что именно применять – решайте сами, исходя из ваших задач и предпочтений.
Please open Telegram to view this post
VIEW IN TELEGRAM
извиняюсь, что не в 12:00
charBuffer
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит java.nio.
Этот метод возвращает объект CharBuffer, который представляет последовательность символов строки.
CharBuffer позволяет эффективно читать и манипулировать символами строки без создания копий.
Я хочу показать вам разные фишки и техники, которые можно использовать при написании кода. Не буду говорить, что вот это – "правильно", а вот это – "нет". Что-то работает лучше, что-то хуже, всё зависит от ситуации. Главное, что я хочу донести – это то, что так делать можно. А уж что именно применять – решайте сами, исходя из ваших задач и предпочтений.
Please open Telegram to view this post
VIEW IN TELEGRAM
1 3 2 1
Класс LocalDateTime
Класс LocalDateTime используется для работы с датой и временем без учета часового пояса.
Он появился в Java 8 в пакете java.time и является частью новой date/time API, которая пришла на смену устаревшим классам Date и Calendar.
Основные возможности класса LocalDateTime:
— Хранение даты и времени с точностью до наносекунд.
— Получение различных компонентов даты/времени (год, месяц, день недели и т. д.).
— Выполнение операций сложения и вычитания дат и интервалов.
— Сравнение и сортировка дат по времени.
— Форматирование и парсинг строк по заданному шаблону.
📱 krosovok programs
Класс LocalDateTime используется для работы с датой и временем без учета часового пояса.
Он появился в Java 8 в пакете java.time и является частью новой date/time API, которая пришла на смену устаревшим классам Date и Calendar.
Основные возможности класса LocalDateTime:
— Хранение даты и времени с точностью до наносекунд.
— Получение различных компонентов даты/времени (год, месяц, день недели и т. д.).
— Выполнение операций сложения и вычитания дат и интервалов.
— Сравнение и сортировка дат по времени.
— Форматирование и парсинг строк по заданному шаблону.
Я хочу показать вам разные фишки и техники, которые можно использовать при написании кода. Не буду говорить, что вот это – "правильно", а вот это – "нет". Что-то работает лучше, что-то хуже, всё зависит от ситуации. Главное, что я хочу донести – это то, что так делать можно. А уж что именно применять – решайте сами, исходя из ваших задач и предпочтений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Поздравляем всех с Днем святого Валентина!
t.me/box14bot/send?startapp=C8818B
t.me/box14bot/send?startapp=C8818B
Telegram
Отправь валентинку 💌
Отправь тайную валентинку, признайся в симпатии или оставь нежное послание – всё анонимно! 😏💖
krosovok programs
⌛️ 2 часа
если у кого-то есть желанию сделать совместный розыгрыш, пишите —> @krosov_ok
второй будет больше чем первый, но 3 Вас порадует конкретно, это я гарантирую, пока что разогрев
Please open Telegram to view this post
VIEW IN TELEGRAM
krosovok programs
Выбор дополнительных победителей (в количестве 3):
Победители:
1 - выдал
2 - выдал
3 - выдал
t.me/feedbackKrosovok
Проверить результаты
Победители:
1 - выдал
2 - выдал
3 - выдал
t.me/feedbackKrosovok
Проверить результаты
🔖 хочешь пробрести товар? тебе сюда:
🔖 есть вопросы? тебе сюда:
Please open Telegram to view this post
VIEW IN TELEGRAM
1 2
Какие существуют виды тестовых объектов?
🔞 более подробно —> клик
⭐️ Пустышка (dummy) — объект, который обычно передается в тестируемый класс в качестве параметра, но не имеет поведения: с ним ничего не происходит и никакие его методы не вызываются. Основная цель пустышки — удовлетворение интерфейса без необходимости в её функциональности. Примеры пустышек включают объекты типа
⭐️ Фальшивка (fake object) — применяется в основном для ускорения запуска ресурсоёмких тестов и является заменой тяжеловесного внешнего зависимого объекта его легковесной реализацией. Примеры включают эмулятор базы данных (fake database) или фальшивый веб-сервис.
⭐️ Заглушка (test stub) — используется для получения данных из внешней зависимости, подменяя её. Заглушка игнорирует все данные, поступающие из тестируемого объекта, возвращая заранее определённый результат. Например, если объект использует чтение из конфигурационного файла, можно передать ему заглушку
⭐️ Шпион (test spy) — разновидность заглушки, которая умеет протоколировать обращения к ней из тестируемой системы для проверки их правильности в конце теста. Шпион фиксирует количество, состав и содержание параметров вызовов. Если существует необходимость проверить, что определённый метод тестируемого класса вызывался ровно один раз, шпион — именно то, что нужно.
⭐️ Фикция (mock object) — похожа на шпиона, но обладает расширенной функциональностью с заранее заданным поведением и реакцией на вызовы. Мок-объекты часто используются в тестах для проверки взаимодействий между объектами и могут быть настроены на возврат различных значений в зависимости от вызовов.
📱 krosovok programs
new Object(), null, или строки вроде «Ignored String».ConfigFileStub, которая возвращает тестовые строки конфигурации без обращения к файловой системе.Я хочу показать вам разные фишки и техники, которые можно использовать при написании кода. Не буду говорить, что вот это – "правильно", а вот это – "нет". Что-то работает лучше, что-то хуже, всё зависит от ситуации. Главное, что я хочу донести – это то, что так делать можно. А уж что именно применять – решайте сами, исходя из ваших задач и предпочтений.
Please open Telegram to view this post
VIEW IN TELEGRAM
от krosov_ok & alexec0de
1 место - лицензия майнкрафт (1-2к рублей)
2 место - 250 коинов (250 рублей)
3 место - 250 коинов (250 рублей)
4 место - 250 коинов (250 рублей)
5 место - 250 коинов (250 рублей)
⭐️ условие:
⌛️ итоги:
3.03.25 13:00
Please open Telegram to view this post
VIEW IN TELEGRAM
4 68 12 11 1 1
еще вы можете пересылать в свои тгк, и кинуть скрины мне в лс @krosov_ok
между теми кто репостнул(от 100 подписчиков, делаю исключения) сделаю розыгрыш на 1,5к от себя
так же можете купить спонсорку в @krosovokBuyBot
таблица участников - лист
24.02.25 13:00
между теми кто репостнул
так же можете купить спонсорку в @krosovokBuyBot
таблица участников - лист
⌛️ итоги:
24.02.25 13:00
Please open Telegram to view this post
VIEW IN TELEGRAM
krosovok programs
если у кого-то возникли проблемы, что подписаны на оба тгк, а пишет не выполнено отпишите —> @krosovokHelpBot