🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку
Можно годами смотреть курсы, читать документацию и всё равно топтаться на месте.
А можно попасть в правильное окружение, где каждый день обсуждают новые инструменты, вакансии, реальные кейсы, ошибки и то, что уже завтра станет стандартом.
Я собрал папки и каналы по разным направлениям IT, чтобы ты быстрее находил нужных людей, идеи и полезный контент - без бесконечного поиска.
AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Хакинг: t.iss.one/linuxkalii
DevOps: t.iss.one/DevOPSitsec
Docker: https://t.iss.one/+90Z5TAyfuNU5YmRi
Golang: t.iss.one/Golang_google
Rust: t.iss.one/rust_code
C++: t.iss.one/cpluspluc
C#: t.iss.one/csharp_ci
Java: t.iss.one/javatg
JavaScript: t.iss.one/javascriptv
React: t.iss.one/react_tg
Frontend: t.iss.one/front
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Базы данных: t.iss.one/sqlhub
Data Science: t.iss.one/data_analysis_ml
Big Data: t.iss.one/bigdatai
Математика: t.iss.one/data_math
Физика: t.iss.one/fizmat
Kubernetes: t.iss.one/kubernetc
GameDev: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Собеседования и карьера:
DS собеседования: t.iss.one/machinelearning_interview
Python собеседования: t.iss.one/python_job_interview
Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.iss.one/memes_prog
Английский для программистов: t.iss.one/english_forprogrammers
ИИ и технологии: t.iss.one/vistehno
954 ГБ open-source курсов: https://t.iss.one/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подпишись и сохрани, здесь регулярно появляются новые подборки, инструменты и материалы, которые реально помогают расти быстрее.
Можно годами смотреть курсы, читать документацию и всё равно топтаться на месте.
А можно попасть в правильное окружение, где каждый день обсуждают новые инструменты, вакансии, реальные кейсы, ошибки и то, что уже завтра станет стандартом.
Я собрал папки и каналы по разным направлениям IT, чтобы ты быстрее находил нужных людей, идеи и полезный контент - без бесконечного поиска.
AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Хакинг: t.iss.one/linuxkalii
DevOps: t.iss.one/DevOPSitsec
Docker: https://t.iss.one/+90Z5TAyfuNU5YmRi
Golang: t.iss.one/Golang_google
Rust: t.iss.one/rust_code
C++: t.iss.one/cpluspluc
C#: t.iss.one/csharp_ci
Java: t.iss.one/javatg
JavaScript: t.iss.one/javascriptv
React: t.iss.one/react_tg
Frontend: t.iss.one/front
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Базы данных: t.iss.one/sqlhub
Data Science: t.iss.one/data_analysis_ml
Big Data: t.iss.one/bigdatai
Математика: t.iss.one/data_math
Физика: t.iss.one/fizmat
Kubernetes: t.iss.one/kubernetc
GameDev: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Собеседования и карьера:
DS собеседования: t.iss.one/machinelearning_interview
Python собеседования: t.iss.one/python_job_interview
Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.iss.one/memes_prog
Английский для программистов: t.iss.one/english_forprogrammers
ИИ и технологии: t.iss.one/vistehno
954 ГБ open-source курсов: https://t.iss.one/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подпишись и сохрани, здесь регулярно появляются новые подборки, инструменты и материалы, которые реально помогают расти быстрее.
❤1👍1🔥1
🚀 Spring Boot 4 получил полноценную поддержку Kotlin Serialization
Теперь для
Что он делает:
- автоматически создаёт
- регистрирует HTTP message converter
- позволяет настраивать сериализацию через
- работает с привычными
Пример настройки:
Для Kotlin-проектов на Spring Boot это убирает лишнюю ручную конфигурацию и делает
#SpringBoot4 #Kotlin
Теперь для
kotlinx.serialization есть отдельный starter:spring-boot-starter-kotlinx-serialization-jsonЧто он делает:
- автоматически создаёт
Json bean- регистрирует HTTP message converter
- позволяет настраивать сериализацию через
spring.kotlinx.serialization.json.*- работает с привычными
@Serializable data classПример настройки:
pretty-print: trueignore-unknown-keys: trueДля Kotlin-проектов на Spring Boot это убирает лишнюю ручную конфигурацию и делает
kotlinx.serialization полноценной альтернативой Jackson.#SpringBoot4 #Kotlin
👍7❤3🔥2
💡 Java: Checked vs Unchecked Exceptions, коротко и по делу
В Java исключения делятся на две основные категории:
- Checked - например,
- Unchecked — наследники
Пример:
Практическое правило: checked exceptions имеет смысл использовать для ситуаций, из которых вызывающий код действительно может восстановиться.
#Java #ErrorHandling
В Java исключения делятся на две основные категории:
- Checked - например,
IOException. Компилятор заставит либо обработать исключение через try/catch, либо указать throws.- Unchecked — наследники
RuntimeException. Обязательной обработки на этапе компиляции нет.Пример:
IOException → checked NullPointerException → unchecked IllegalArgumentException → uncheckedПрактическое правило: checked exceptions имеет смысл использовать для ситуаций, из которых вызывающий код действительно может восстановиться.
#Java #ErrorHandling
👍4❤1
🚀 Spring Boot 4 получил отдельный starter для
Теперь imperative HTTP-клиент можно подключать через:
Для реактивного
А настройки HTTP-клиентов собраны под единым префиксом:
То есть конфигурация стала понятнее, а выбор между imperative и reactive подходом — более явным.
#SpringBoot4 #RestClient #Java
RestClientТеперь imperative HTTP-клиент можно подключать через:
spring-boot-starter-restclientДля реактивного
WebClient используется:spring-boot-starter-webclientА настройки HTTP-клиентов собраны под единым префиксом:
spring.http.clients.*То есть конфигурация стала понятнее, а выбор между imperative и reactive подходом — более явным.
#SpringBoot4 #RestClient #Java
❤7👍4🔥4🎉1
Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском
Kafka обучение без воды: каждый модуль состоит из понятной теории, схем, команд, которые можно запустить у себя, типичных ошибок и вопросов для самопроверки. Курс подходит, чтобы выучить Kafka с нуля, подготовиться к собеседованию на backend, data engineer или DevOps-позицию и спроектировать надёжную систему на Kafka в продакшене.
https://github.com/justxor/KAFKAFREECOURSR
Kafka обучение без воды: каждый модуль состоит из понятной теории, схем, команд, которые можно запустить у себя, типичных ошибок и вопросов для самопроверки. Курс подходит, чтобы выучить Kafka с нуля, подготовиться к собеседованию на backend, data engineer или DevOps-позицию и спроектировать надёжную систему на Kafka в продакшене.
https://github.com/justxor/KAFKAFREECOURSR
👍17
🚀 JetBrains обновила roadmap Kotlin: главный фокус - Multiplatform, Wasm и удобство разработки
Что сейчас в приоритете:
- довести Kotlin/Wasm до Stable
- ускорить KAPT до уровня Java APT
- улучшить incremental compilation в K2
- сделать новый JVM reflection
- перевести
- продвинуть Swift Export из Alpha в Beta
- улучшить Xcode integration и Kotlin/Native debugger
- добавить импорт Swift Package Manager пакетов
- развивать Kotlin LSP и поддержку VS Code
- выпустить единый Kotlin Toolchain
- добавить first-class поддержку JPA/Hibernate для Kotlin stdlib types
- стабилизировать
- выпустить Kotlin DataFrame 1.0
- добавить HTTP/3 и gRPC в Ktor
Из уже завершённого: Swift 6.3 support, multi-module compilation для Kotlin/Wasm, Navigation3 для Compose Multiplatform и 18-месячное окно security fixes для stdlib.
Главное направление видно очень чётко: Kotlin всё сильнее двигается в сторону полноценной кроссплатформенной экосистемы — JVM, iOS, WebAssembly и web.
Следующее обновление roadmap запланировано на февраль 2027.
https://kotlinlang.org/docs/roadmap.html
Что сейчас в приоритете:
- довести Kotlin/Wasm до Stable
- ускорить KAPT до уровня Java APT
- улучшить incremental compilation в K2
- сделать новый JVM reflection
- перевести
wasm-wasi на WASI Preview 2 и добавить Component Model- продвинуть Swift Export из Alpha в Beta
- улучшить Xcode integration и Kotlin/Native debugger
- добавить импорт Swift Package Manager пакетов
- развивать Kotlin LSP и поддержку VS Code
- выпустить единый Kotlin Toolchain
- добавить first-class поддержку JPA/Hibernate для Kotlin stdlib types
- стабилизировать
kotlinx.serialization, kotlinx.collections.immutable и kotlinx-io- выпустить Kotlin DataFrame 1.0
- добавить HTTP/3 и gRPC в Ktor
Из уже завершённого: Swift 6.3 support, multi-module compilation для Kotlin/Wasm, Navigation3 для Compose Multiplatform и 18-месячное окно security fixes для stdlib.
Главное направление видно очень чётко: Kotlin всё сильнее двигается в сторону полноценной кроссплатформенной экосистемы — JVM, iOS, WebAssembly и web.
Следующее обновление roadmap запланировано на февраль 2027.
https://kotlinlang.org/docs/roadmap.html
❤6👍1🔥1😱1
Как дать ИИ-агенту доступ к корпоративным данным и ничего не сломать
6 октября в 17:00 мск в Архитектурном клубе Яндекс 360 разберут, как устроены агенты, которые работают с внутренними документами, поиском и сервисами компании.
На встрече Архитектурного клуба Даниил Смирнов, руководитель службы бэкенд-разработки Антиспама Яндекс 360, покажет весь контур системы: оркестратор, инструменты, память, EVAL и наблюдаемость.
Помимо обзора архитектуры на встрече разберут:
- как агент наследует права доступа исходных систем;
- как изолировать данные пользователей и организаций;
- как не допустить утечек через поисковый индекс и кеш;
- как контролировать автономные действия;
- как оценивать поиск, выбор инструментов и итоговые ответы по отдельности.
📅 6 октября, 17:00 мск
💻 Онлайн, бесплатно
→ [Зарегистрироваться]
6 октября в 17:00 мск в Архитектурном клубе Яндекс 360 разберут, как устроены агенты, которые работают с внутренними документами, поиском и сервисами компании.
На встрече Архитектурного клуба Даниил Смирнов, руководитель службы бэкенд-разработки Антиспама Яндекс 360, покажет весь контур системы: оркестратор, инструменты, память, EVAL и наблюдаемость.
Помимо обзора архитектуры на встрече разберут:
- как агент наследует права доступа исходных систем;
- как изолировать данные пользователей и организаций;
- как не допустить утечек через поисковый индекс и кеш;
- как контролировать автономные действия;
- как оценивать поиск, выбор инструментов и итоговые ответы по отдельности.
📅 6 октября, 17:00 мск
💻 Онлайн, бесплатно
→ [Зарегистрироваться]
👍3🔥3
Forwarded from Machinelearning
🚀 Anthropic представила Claude Opus 5.5
Новая флагманская модель стала сильнее Opus 5, при этом работает быстрее и дешевле.
Что изменилось:
- сильнее в агентном программировании, computer use и knowledge work
- лучше справляется с длинными задачами и большими кодовыми базами
- ответы стали короче и естественнее
- улучшена устойчивость к prompt injection
- Anthropic заявляет примерно на 40% более низкую стоимость на типичных задачах и более чем на 30% более быструю генерацию
Из примеров:
- один из ранних тестеров провёл миграцию 680 000 строк кода менее чем за день
- в тесте Anthropic модель переписала HAProxy с C на Rust за 9,5 часа
Цена API:
- $4 / 1M входных токенов
- $20 / 1M выходных токенов
- $0,20 / 1M токенов при чтении кеша
Бенчмарки:
- Terminal-Bench 4.0 — 66,4%
- FrontierCode v1.1 — 54,4%
- Humanity’s Last Exam — 67,7% с инструментами
Также Anthropic подтвердила, что Claude Sonnet 5.5 и Haiku 5.5 выйдут в ближайшие недели.
https://www.anthropic.com/claude-opus-5-5
Новая флагманская модель стала сильнее Opus 5, при этом работает быстрее и дешевле.
Что изменилось:
- сильнее в агентном программировании, computer use и knowledge work
- лучше справляется с длинными задачами и большими кодовыми базами
- ответы стали короче и естественнее
- улучшена устойчивость к prompt injection
- Anthropic заявляет примерно на 40% более низкую стоимость на типичных задачах и более чем на 30% более быструю генерацию
Из примеров:
- один из ранних тестеров провёл миграцию 680 000 строк кода менее чем за день
- в тесте Anthropic модель переписала HAProxy с C на Rust за 9,5 часа
Цена API:
- $4 / 1M входных токенов
- $20 / 1M выходных токенов
- $0,20 / 1M токенов при чтении кеша
Бенчмарки:
- Terminal-Bench 4.0 — 66,4%
- FrontierCode v1.1 — 54,4%
- Humanity’s Last Exam — 67,7% с инструментами
Также Anthropic подтвердила, что Claude Sonnet 5.5 и Haiku 5.5 выйдут в ближайшие недели.
https://www.anthropic.com/claude-opus-5-5
👍10❤4
⚡️⚡️Joker 2026: что происходит с профессией разработчика
Индустрия разработки проходит через серьезный переломный момент. Меняются не только инструменты и фреймворки, но и привычный подход к работе.
Поэтому в этом сезоне меняется и Joker: первый день традиционно посвящен Java — Core Java, рантайму и работе на уровне железа. А во второй день будем обсуждать, как прямо сейчас меняется сама инженерная практика.
В программе — Context Engineering, команды из людей и ИИ-агентов, Self-Evolving Agents, новые подходы к архитектуре и работе с моделями, а также вопросы ответственности и роли эксперта.
Собрали главные темы второго дня в карточках.
🌟С промокодом:
Полное расписание и билеты — на сайте.
Индустрия разработки проходит через серьезный переломный момент. Меняются не только инструменты и фреймворки, но и привычный подход к работе.
Поэтому в этом сезоне меняется и Joker: первый день традиционно посвящен Java — Core Java, рантайму и работе на уровне железа. А во второй день будем обсуждать, как прямо сейчас меняется сама инженерная практика.
В программе — Context Engineering, команды из людей и ИИ-агентов, Self-Evolving Agents, новые подходы к архитектуре и работе с моделями, а также вопросы ответственности и роли эксперта.
Собрали главные темы второго дня в карточках.
🌟С промокодом:
javatg1 персональные билеты дешевлеПолное расписание и билеты — на сайте.
🔥4❤2🤬2🥰1
Spring Boot 4: как перенести старые настройки
При обновлении добавьте временную зависимость:
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
application.properties или application.yaml, убедитесь, что предупреждения исчезли, и удалите зависимость. Оставлять её в проекте постоянно не нужно.#SpringBoot4 #Migration
При обновлении добавьте временную зависимость:
runtimeOnly("org.springframework.boot:spring-boot-properties-migrator")
После запуска приложения migrator:
* найдёт устаревшие и переименованные параметры;
* выведет подсказки в логах;
* временно преобразует старые ключи во время выполнения.
Исправьте настройки в
application.properties или application.yaml, убедитесь, что предупреждения исчезли, и удалите зависимость. Оставлять её в проекте постоянно не нужно.#SpringBoot4 #Migration
👍8❤5🤩2🥰1
Kotlin 2.5.0-Beta1 вышел
JetBrains выпустила первую бета-версию Kotlin 2.5.0.
Главное:
- Language: стабильная name-based destructuring в
- Standard Library: новые экспериментальные функции для упрощения типичных конструкций с
- Kotlin/JS: добавлена поддержка target ES2020.
- Compiler: более предсказуемое поведение inline-функций при компиляции
Пока это Beta, но релиз уже показывает, в какую сторону движется Kotlin 2.5: меньше синтаксического шума, современнее JS-таргеты и более стабильное поведение компилятора.
https://kotl.in/2-5-0-beta1
JetBrains выпустила первую бета-версию Kotlin 2.5.0.
Главное:
- Language: стабильная name-based destructuring в
only-syntax режиме, плюс экспериментальные companion extensions и blocks.- Standard Library: новые экспериментальные функции для упрощения типичных конструкций с
if.- Kotlin/JS: добавлена поддержка target ES2020.
- Compiler: более предсказуемое поведение inline-функций при компиляции
.klib.Пока это Beta, но релиз уже показывает, в какую сторону движется Kotlin 2.5: меньше синтаксического шума, современнее JS-таргеты и более стабильное поведение компилятора.
https://kotl.in/2-5-0-beta1
🎉4❤3🥰2
⚡️Продвинутый Java-совет: используйте `ClassValue`
Если нужно кешировать метаданные отдельно для каждого класса, не обязательно создавать
Полезно для reflection, сериализации, мапперов и собственных фреймворков.
#Java #JavaTips #Backend
Если нужно кешировать метаданные отдельно для каждого класса, не обязательно создавать
ConcurrentHashMap<Class<?>, Metadata>.
private static final ClassValue<Metadata> CACHE =
new ClassValue<>() {
@Override
protected Metadata computeValue(Class<?> type) {
return scan(type);
}
};
Metadata metadata = CACHE.get(MyClass.class);
ClassValue лениво вычисляет значение, безопасно работает при конкуренции потоков и хранит отдельный результат для каждого Class. Сбросить кеш можно через remove().Полезно для reflection, сериализации, мапперов и собственных фреймворков.
#Java #JavaTips #Backend
🔥6❤3🎉3👍1
💡 Java: не создавайте тяжёлые объекты раньше времени
Если объект дорогой в создании, но нужен только в редких сценариях, eager initialization может зря тратить время и память.
Вместо этого используйте lazy initialization:
Так HeavyAnalyzer создастся только при первом реальном обращении.
Где особенно полезно:
- кэши;
- API-клиенты;
- тяжёлая конфигурация;
- анализаторы;
- объекты с дорогой инициализацией.
Для более чистого кода можно использовать Supplier, holder pattern или современные lazy-механизмы Java.
Если доступ идёт из нескольких потоков, простая проверка if (analyzer == null) уже недостаточна - нужна потокобезопасная реализация.
Если объект дорогой в создании, но нужен только в редких сценариях, eager initialization может зря тратить время и память.
Вместо этого используйте lazy initialization:
private HeavyAnalyzer analyzer;
private HeavyAnalyzer analyzer() {
if (analyzer == null) {
analyzer = new HeavyAnalyzer();
}
return analyzer;
}
Так HeavyAnalyzer создастся только при первом реальном обращении.
Где особенно полезно:
- кэши;
- API-клиенты;
- тяжёлая конфигурация;
- анализаторы;
- объекты с дорогой инициализацией.
Для более чистого кода можно использовать Supplier, holder pattern или современные lazy-механизмы Java.
Если доступ идёт из нескольких потоков, простая проверка if (analyzer == null) уже недостаточна - нужна потокобезопасная реализация.
👍7❤3🔥2😱1
В Spring Boot 3 SSL-компонент health endpoint переходил в особый статус WILL_EXPIRE_SOON, если сертификат скоро истекал. Для проб Kubernetes и балансировщиков это было неудобно: непонятно, считать сервис живым или нет.
В Spring Boot 4 этот статус убрали. Health остаётся UP, а цепочки сертификатов, срок которых скоро закончится, перечисляются в details.expiringChains. Порог предупреждения задаётся свойством
management.health.ssl.certificate-validity-warning-threshold:
management:
health:
ssl:
certificate-validity-warning-threshold: 14d
endpoint:
health:
show-details: always
Ответ
/actuator/health тогда выглядит так:
{
"status": "UP",
"details": {
"expiringChains": ["server-cert…"]
}
}
Практический вывод простой: пробы больше не будут дёргаться из-за истекающего сертификата, но и алерт по смене статуса тоже не сработает. Если мониторинг ловил WILL_EXPIRE_SOON, переключите его на проверку непустого expiringChains и не забудьте включить
show-details, иначе деталей в ответе не будет.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1😁1
🧠 Spring AI показал, как сделать RAG заметно умнее обычного vector search.
Проблема классического RAG: похожий документ ещё не значит полезный.
Новый пайплайн делает так:
Jev проверяет каждый найденный chunk: есть ли там реальный ответ, противоречие или prompt injection.
В демо vector search нашёл 6 фрагментов, но до модели дошли только 2 действительно полезных.
Меньше мусора в контексте → точнее ответы и меньше шансов на prompt injection.
Код и разбор:
https://spring.io/blog/2026/10/02/spring-ai-modular-rag-typesafe-jev/
Проблема классического RAG: похожий документ ещё не значит полезный.
Новый пайплайн делает так:
Question → Rewrite → MultiQuery → Vector Search → Jev Filter → Rerank → LLMJev проверяет каждый найденный chunk: есть ли там реальный ответ, противоречие или prompt injection.
В демо vector search нашёл 6 фрагментов, но до модели дошли только 2 действительно полезных.
Меньше мусора в контексте → точнее ответы и меньше шансов на prompt injection.
Код и разбор:
https://spring.io/blog/2026/10/02/spring-ai-modular-rag-typesafe-jev/
👍6🔥4❤3
💡 Предпочитайте делегирование наследованию
Связь
Но есть цена.
✅ Подкласс получает весь API родителя.
✅ Он зависит от деталей реализации суперкласса.
✅ Изменение родительского класса может неожиданно сломать потомка.
И чем глубже иерархия, тем сложнее понять, откуда вообще взялось конкретное поведение.
Часто безопаснее композиция:
Вместо наследования:
Композиция связывает объекты. Наследование связывает их судьбы.
Если объекту просто нужна чужая функциональность, чаще лучше её делегировать, а не наследовать.
Связь
is-a выглядит удобно: создаём подкласс, наследуем поведение и пишем меньше кода.Но есть цена.
✅ Подкласс получает весь API родителя.
✅ Он зависит от деталей реализации суперкласса.
✅ Изменение родительского класса может неожиданно сломать потомка.
И чем глубже иерархия, тем сложнее понять, откуда вообще взялось конкретное поведение.
Часто безопаснее композиция:
class OrderService {
private final PaymentService paymentService;
}
Вместо наследования:
class OrderService extends PaymentService {
}
Композиция связывает объекты. Наследование связывает их судьбы.
Если объекту просто нужна чужая функциональность, чаще лучше её делегировать, а не наследовать.
👍4❤3🔥3