Тёмный

Public vs Private: Какой уровень доступа использовать? 

Sergey Nemchinskiy
Подписаться 360 тыс.
Просмотров 19 тыс.
50% 1

Сегодня обсуждаем какой уровень модификатора использовать)
Новые онлайн курсы GRASP and GoF Design patterns - bit.ly/2CAxHC1
Курсы JAVA - bit.ly/2NyNLKE
Курсы C#/.NET - bit.ly/2WY5M8t
Курсы ANDROID С НУЛЯ - bit.ly/2Q1yHqF
Курсы Automation QA (Java) - bit.ly/36OXLqY
Курсы FRONT-END - bit.ly/2rv4x55
Курсы UI/UX дизайна - bit.ly/2NZg58l
Курсы WordPress Developer - bit.ly/2p6R56A
Сайт Foxminded: bit.ly/2WXcc7O
Foxminded в ФБ: / foxmindedco
FoxmindEd в Instagram: / foxminded.ua
Мой Telegram: t.me/nemchinskiyOnBusiness
Мой блог: www.nemchinsky.me

Опубликовано:

 

14 ноя 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 181   
@user-gw1sv9hj4x
@user-gw1sv9hj4x 4 года назад
Немчинский не начал с Адама и Евы? Ты кто такой и что ты сделал с Немчинским?
@Sergey-vh3vj
@Sergey-vh3vj 4 года назад
Спасибо, было интересно и полезно послушать.
@joekerman1114
@joekerman1114 4 года назад
В продолжение темы: когда следует использовать final?
@rustamibrahimli2113
@rustamibrahimli2113 4 года назад
или protected))
@rubik6169
@rubik6169 4 года назад
Часто замечал что в разных sdk (например AWS) локальные переменные обьявляются final. Имеет ли это хоть какой-то эффект на перформанс в рантайм / ускоряет ли компайл тайм, или это просто тыкание?
@joekerman1114
@joekerman1114 4 года назад
@@rustamibrahimli2113 с protected немного проще - это когда вроде бы private, но надо открыть доступ наследникам.
@lynx6511
@lynx6511 4 года назад
@@rubik6169 Это скорее показывает, что переменная не меняется в процессе и сразу видно, что это константа. Легче не запутаться в процессе "понимания чужого кода"
@pb-bass8727
@pb-bass8727 4 года назад
@@rubik6169, слышал мнение от авторитетного источника (не в видео Немчинского, но так же это был программист с большим опытом), что final обеспечивает гарантированно тот факт, что значение поля не будет изменено в процессе выполнения программы. Все. Ни на какую производительность оно не влияет.
@alexzhyla2875
@alexzhyla2875 4 года назад
Да, расскажите пож-та, в вашей манере ("на пальцах") о методах ООП (инкапсуляция, полиморфизм....)
@jeoparrdy
@jeoparrdy 4 года назад
З величезним задоволенням послухав би теж про інкапсуляцію! Зробіть окреме відео, будь ласка!
@ilyaserov4150
@ilyaserov4150 4 года назад
+1, я понимаю как они все работают, но мне кажется у меня будет проблема что бы обьяснить собеседующему меня человеку про полиморфизм и абстракцию, я понимаю как и где оно используется, но слов подобрать не получается как мне кажется
@user-nn2oy5wy4o
@user-nn2oy5wy4o 4 года назад
@@ilyaserov4150 Вот лучшая лекция по этой теме, для понимания данного вопроса : ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-j-zS42qRv88.html - без привязки к языку :)
@user-dv9fk1hd3s
@user-dv9fk1hd3s 4 года назад
Везде, где речь заходит про инкапсуляцию, про неё говорят только то что это не сокрытие. Это говорят настолько часто, что наоборот инкапсуляция стойко ассоциируется с сокрытием.
@user-nn2oy5wy4o
@user-nn2oy5wy4o 4 года назад
@@user-dv9fk1hd3s Инкапсуляция помогает навести порядок в коде, чтоб меньше было путанец. Тут лучше пояснение зачем нужна Инкапсуляция : ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-j-zS42qRv88.html - пока лучшего пояснения не встречал и это сокрытие тоже :)
@user-kr8um8ub6i
@user-kr8um8ub6i 4 года назад
Конечно интересно!
@Eltar007
@Eltar007 4 года назад
Спасибо большое, как всегда все понятно.
@user-gw1sv9hj4x
@user-gw1sv9hj4x 4 года назад
Очень мутное описание статических методов. То, как вы описывали в начале про статические методы, больше подходит под описание полей и методов в абстрактных классах или просто в супер классах (вроде они так называются). Мне кажется, что статические методы и поля чаще всего используются для каких-нибудь вспомогательных классах, которые выполняют роль библиотек (например, Math)
@evgeniym29
@evgeniym29 4 года назад
Я ждал этой фразы - "вызов методов через интерфейс" :)
@ashimov1970
@ashimov1970 4 года назад
Интересна, интересна!
@user-hs5ix8rk7x
@user-hs5ix8rk7x 4 года назад
Я хоть и прекрасно разбираюсь в ООП, но послушать было интересно))) Спасибо))
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
спасибо
@gordonfreeman1842
@gordonfreeman1842 4 года назад
Если прекрасно разбираешься, то расскажи, зачем нужен абстрактный класс. Немчинский как-то пытался объяснить, вышло очень невнятно.
@jamade3687
@jamade3687 4 года назад
@@gordonfreeman1842 и тут Сергей Пащенко замолчал.......
@gordonfreeman1842
@gordonfreeman1842 4 года назад
@@jamade3687 ну да, щёки надувать-то все умеют, а как до дела доходит ...
@MrAbad202
@MrAbad202 3 года назад
@@gordonfreeman1842, я, конечно не эксперт в ООП, но вроде он нужен в такой ситуации: в компании о разработке сайта надо обработать из базы данных какую-то информацию, есть 2 группы программистов, одна должна написать класс, где будут средства, для того чтобы вытаскивать по-особому данные из БД, а вторая будет их обрабатывать. Но поскольку работа идет параллельно, то вторая не может работать, пока не закончит работу первая. И тут в дело вступают абстрактные классы и интерфейсы. Вторая группа создает абстрактный класс, где описывает поля и методы, с которыми они будут работать. И теперь они использует эти методы в своем проекте, и когда они завершат работу над своей часть уже будет готова остальная
@nikitoz_one
@nikitoz_one 4 года назад
Спасибо, понял смысл модификатора static/
@aaaee.l
@aaaee.l 4 года назад
Интересно!
@johnjohnkarton3087
@johnjohnkarton3087 4 года назад
Спасибо
@user-qz1gg8tr3w
@user-qz1gg8tr3w 4 года назад
Здравствуйте, Сергей. учусь программировать около 5 месяцев. Начал за собой замечать, что чрезмерно использую гугл, для решения какой-либо задачи. К примеру, мне нужно в потоке загрузить данные с сервера через AsyncTask. Я знаю что мне нужно именно AsyncTask и какие методы в нем, но я не знаю, что именно писать в этих методах. Я гуглю и смотрю как люди реализовывали похожую задачу, и меняю их код на свой лад. Очень бы хотелось услышать, что вы думаете на это счет, думаю очень полезно будет для новичков)
@katrinwilf3231
@katrinwilf3231 4 года назад
Добро пожаловать в профессию :))) цель программиста решать задачи, а не зубрить справочники и весь синтаксис. Вы должны знать ряд принципов работы, методологию, какие основные компоненты есть и с чем их едят, придерживаться стандартов и знать примерно что найти и главное где искать. Уметь анализировать и применять на практике полученную информацию. ОК ГУГЛ, это фактически ежедневный рабочий инструмент любого разработчика. Как говорится, всё знает только идиот или шизофреник. Чем чаще вы пользуетесь теми или иными методами и компонентами, тем реже вы заглядываете в справку по ним. Но даже зная их досконально, не используя в работе годик другой, вы потом опять полезете в справку и примеры реализации, это норма.
@SpaSergo
@SpaSergo 4 года назад
Это норма. Е.Малышева. Хотя с опытом у тебя наберется свой "набор решений" по базовым и не очень задачам. И применять этот набор будет быстрее и предсказуемее чем гуглить. Но при этом привычка гуглить может оказаться полезной что бы держать руку на пульсе - получать иные решения и пересматривать решения из "своего набора"
@eslepakurov
@eslepakurov 4 года назад
Сергей, спасибо за Ваши видео. С примерами кода было бы ещё круче)
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
С примерами кода только путанее получается, пробовал
@tsvlad2470
@tsvlad2470 4 года назад
Вопрос: плюсы и минусы магистратуры в IT. Стоит ли того?
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
Инкапсуляция и сокрытие данных это РАЗНЫЕ ВЕЩИ, Про красные машины (статические методы): экземпляр класса - объект. Класс - чертеж, по которому этот объект строится. Static метод/поле принадлежит чертежу. Остальные методы принадлежат объектам. У статических полей/методов нет проблем с многопоточностью. АБСОЛЮТНО. Это фича статических полей/методов в java...если они финальные
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
@@Iskledian если нет сокрытия, то нет АБСТРАКЦИИ. Меж тем инкапсуляция лишь распределение данных, и не более.
@kinkcat77
@kinkcat77 4 года назад
А можно про методы гденить у Вас подсмотреть?
@user-bg3sh3uw2c
@user-bg3sh3uw2c 4 года назад
Лично у меня сильно другой подход к private vs public(методам): Инкапсуляция инкапсуляцией, но приватные методы - это далеко не всегда тот механизм, который её обеспечивает. В неопытных руках это гораздо чаще приводит к ухудшению качества кода. Появилось желание написать приватный метод -> подумайте, а правильно ли вы моделируете свой домен, может всё-таки лучше выделить абстракцию, уточнить апи текущего класса... и только тогда уже private. Именно тогда, я могу хоть как то быть уверен, что private используется для сокрытия реализации... 1 Наличие большого кол-ва приватных методов, говорит о вероятном нарушении SRP, а значит в классе поселился "чужой". Другими словами, класс взял на себя слишком много ответственности и стоит задуматься над вынесением этой логики в отдельную абстракцию/абстракции. 2 Приватные методы напрямую не протестируешь! И вы очень азартны, если хотите оставлять большие куски такой логики без проверок.... 3 Код приватного метода естественно непригоден к повторному использованию вне класса. Имхо. И да, инкапсуляция - это в первую очередь, сокрытие от пользователя не только реализации класса, но и возможностей по переводу объекта в неконсистентное состояние, плюс предоставление корректного апи по использованию объекта. Когда я вспоминаю об инкапсуляции, я переживаю именно об этом, а не о том, что нужно срочно по закрывать все лишние открытые методы. Успеем закрыть, кончено пабликами не стоит злоупотреблять, и уж тем более не надо просто так клепать. Но бяка не здесь.... А вот отсутствие продуманного интерфейса(api) и наличие большого кол-ва private методов - вот настоящее зло. Код не тестируемые, тяжело поддерживаемый. Ну и в конце концов, клиент сам виноват, что при наличии официального контракта(интерфейса) завязался на паблик методы, которые автор класса и поддерживать не обязан.
@augustjoyce3504
@augustjoyce3504 4 года назад
Просто тестировать нужно АПИ, а не приватные методы, если мы говорим о CI/CD. Если тестируешь локально, то просто на время тестирования делаешь их пабликом. Нарушения SRP никакого не вижу, если в приватных методах ты создаешь нужные объекты и вызываешь их методы. АПИ классы несут в себе много логики под капотом и разбивать их, чтобы соблюсти идеальный SRP, будет неудобно для пользователя.
@user-bg3sh3uw2c
@user-bg3sh3uw2c 4 года назад
@@augustjoyce3504 1 *_"Просто тестировать нужно АПИ"_* - естественно. Только в реалиях, api - это айсберг, а тупое следование принципу прикопать под ковер приводит к тому, что 70% логики в итоге в приватных методах. Да даже хоть 20%, вы думаете это не надо тестировать? Если вы будете тестить это через апи - у вас будет комбинаторный взрыв входных данных. И я всёравно уверен, что куча приватных if'ов так и останутся не покрытыми тестами. 2 *_"если мы говорим о CI/CD. "_* - вообще не понял при чём здесь это сейчас. 3 *_"Если тестируешь локально, то просто на время тестирования делаешь их пабликом."_* - даже комментировать не хочется. 4 *_"АПИ классы несут в себе много логики под капотом и разбивать их, чтобы соблюсти идеальный SRP, будет неудобно для пользователя."_* - SRP, сам по себе, это не самоцель. А вот легко поддерживаемый и тестируемый код - да!
@lynx6511
@lynx6511 4 года назад
Статические методы удобно использовать в утилитарных классах, чтобы не создавать экземпляр и вызывать явно. Уже не говоря о всяких фабриках. А статические поля в многопотоке еще та попоболь, бывало, что три потока стучалось в одно статическое поле. Только потом додумался завернуть в synchronized, но можно и использовать Atomic, для придания операциям атомарности. Но все равно не покидает ощущение, что сделал какой-то лютый костыль, но по-другому никак не могу сделать
@maxlich9139
@maxlich9139 4 года назад
локальные переменные, например
@DarkCooder
@DarkCooder 4 года назад
Реализация singletone и фабричного метода через static - тоже плохая идея?
@samav99
@samav99 4 года назад
Давайте про инкапсуляции. У Вас хорошо получается объяснять.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
в планах :)
@SuperGamervideo
@SuperGamervideo 4 года назад
Есть ли смысл для бизнес логики использовать partial class? Где каждый файл = модуль приложения. В виде одного класса большого (partial). Например: game.character.cs, game.war.cs, game.trade.cs и т.д.
@maxlich9139
@maxlich9139 4 года назад
в смысле файлы с 10 тысячами строка?) а пакеты для кого придуманы?
@SuperGamervideo
@SuperGamervideo 4 года назад
@@maxlich9139 я про c#
@dmitrimatantsev1898
@dmitrimatantsev1898 4 года назад
Коротко: "static"- поля/методы одни для всех экземпляров данного класса, плюс можно использовать без экземпляра, а прямо с класса, "public" - если вызывается из другого класса, "private" - если вызывается только из данного класса. Вот и всё :) Полезно, кстати, смотреть на нативные классы из JDK.
@alexei3366
@alexei3366 4 года назад
согласен. Я то же так делаю. Делаю сначала все private. А потом если нужно открываю доступ через public.
@asd-sl1kv
@asd-sl1kv 3 года назад
Вау круто
@illiagoriushkin3940
@illiagoriushkin3940 4 года назад
интересно
@Dmittry
@Dmittry 4 года назад
Да нам всё интересно. Ты главное рассказывай.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
вот уж точно буду :)
@AntiSmithhh
@AntiSmithhh 4 года назад
интересено мнение про swift5 и swiftUI.
@vladimir0rus
@vladimir0rus 8 месяцев назад
Про статик методы ошибочное утверждение - проблемы с многопоточностью не метод создает, а небезопасный доступ к данным. То что разные потоки обращаются к статическому методу не создаст проблем если в методе не происходит работа с общими данными. Метод это просто код и этот код может быть вызван множеством потоков одновременно. Но если внутри метода, без какой либо защиты, будет модифицироваться общая для всех переменная, то результат будет не предсказуемым. static int sum(int a, int b) { return a + b; } - прекрасно будет работать в многопотоке.
@user-nz2hh9po2r
@user-nz2hh9po2r 4 года назад
Сергей, просьба поделиться вашими соображениями, чем классы принципиально отличаются от структур в процедурном программировании, для работы с которыми определены функции
@0imax
@0imax 4 года назад
Я, конечно, не Сергей, но могу сказать, что классы - это следующая ступень эволюции структур. Отличие в том, что структура рассматривается в первую очередь как набор данных, а функции играют лишь вспомогательную роль. Класс же рассматривается как представление объекта предметной области с его поведением, а данные, содержащиеся в нём, уходят на второй план. В целом эти вещи довольно близки с точки зрения кода (в С++ структуры вообще реализованы на базе классов), но различаются по смыслу и предназначению.
@AlexPa1986
@AlexPa1986 4 года назад
А как тогда заменяется статический метод например Helper.getCountryCodeByIp(String ip). Т.е. если так плохо, то как лучше делать?
@user-qo3rr3kf9i
@user-qo3rr3kf9i 4 года назад
this.countryCodeService.getByIp(String ip)
@user-pu3gg9il7g
@user-pu3gg9il7g 4 года назад
Расскажите, пожалуйста, какую роль играет web в java enterprise.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Эм.... так морда в энтерпрайзе всегда веб
@Andrew_Moryakov
@Andrew_Moryakov 4 года назад
Надо не меньше давать доступа, а делать продуманную архитектуру ^^)
@0imax
@0imax 4 года назад
Одно из другого вытекает. С нормальной архитектурой нет нужды в кучке паблик полей.
@SergeiCherkai
@SergeiCherkai 4 года назад
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ИНТЕРЕСНО !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@artursveshnikov7668
@artursveshnikov7668 3 года назад
Сергей, а есть в планах инверсия контроля для новичков? Сколько читаю и попробую, до конца догнать не могу.
@SergeyNemchinskiy
@SergeyNemchinskiy 3 года назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-Bw6RvCSsETI.html
@RomanTruk
@RomanTruk 4 года назад
Сергей, про полиморфизм расскажи
@user-lg3nm9qt9z
@user-lg3nm9qt9z 4 года назад
Даёшь инкапсуляцию и стримы
@artsiomfiyas4016
@artsiomfiyas4016 4 года назад
Like!
@user-di7jx3or6f
@user-di7jx3or6f 4 года назад
Привет! Раскрытие темы инкапсуляции в формате ответов на новичковые вопросы актуально.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Хорошо, запишу видео про ООП
@leonbishop7404
@leonbishop7404 4 года назад
я - пожилая плавающая ошибка
@user-zq9dd2ml4y
@user-zq9dd2ml4y 4 года назад
В своё время тоже были проблемы с пониманием использования static, для себя вывел такую аналогию, что есть класс "свинарник", внутри него есть поле "кормушка" которое является статическим и доступно для каждой свиньи в свинарнике
@user-qo3rr3kf9i
@user-qo3rr3kf9i 4 года назад
Паша Назин то есть у тебя свинья будет экземпляром свинарника?
@sergeychernikov6595
@sergeychernikov6595 4 года назад
Не знаю, было ли такое видео или нет (по крайней мере я его не нашел), но не могли бы вы рассказать как в целом собирается интерпрайс проект с джавой? Т.е. весь процесс от начала до конца, заранее, спасибо :)
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Интересная тема, только уточните, пожалуйста что имеется в виду - как происходит старт проекта с точки зрения маркетинг-продажа-разработка и тд. или с точки зрения CI/CD или с точки зрения что делает разработчик с новым проектом?
@sergeychernikov6595
@sergeychernikov6595 4 года назад
@@SergeyNemchinskiy с точки зрения CI/CD
@augustjoyce3504
@augustjoyce3504 4 года назад
А какие альтернативы статических методов в утилитарных классах? Всегда так писал, да и видел везде, что *Utils - набор статических методов.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Ну, утилитные классы - это нарушение ООП из коробки
@cwnik
@cwnik 4 года назад
Про рефлексию нужно снять и интересно было бы от вас послушать про спринг, когда новичковые и мидл будут видосы по спрингу?))
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Про рефлекшн я не уверен, что надо снимать. надо? А про спринг - скоро будут
@cwnik
@cwnik 4 года назад
@@SergeyNemchinskiy ну я думаю многим было бы полезно узнать что это и как работает и для чего нужно и что спринг работает на рефлексии, особенно если объясняют простыми словами. Если снимете было бы неплохо, но как вы посчитаете нужным
@BatsAndrii
@BatsAndrii 4 года назад
@@SergeyNemchinskiy о, это отлично) давно жду. Спасибо за простое объяснение и примеры, это помогает
@user-qh2ru8wk4t
@user-qh2ru8wk4t 4 года назад
пишу на пхп, но тема про ооп прям ок идёт ) вот бы такими же простыми словами о том, как быстро настраивать томкат поверх апача с поддержкой нескольких доменов и чтобы все на 80 порту были и не конфликтовали 😂 (не спрашивайте зачем, - у каждого свои извращения)
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
РНР - это отличный ООП язык. если вы пишете на нем процедурно - вы себя обкрадываете
@user-qh2ru8wk4t
@user-qh2ru8wk4t 4 года назад
Стараюсь всегда ООП использовать, но на маленьких 1-2 месячных промо-проектах обычно нет смысла разворачивать большие системы, поэтому чаще всего всё сводится к использованию микро-фреймворка, MVC, обработчиков ajax-запросов, и парочки своих классов для частых задач с возможностью быстрых правок. Поэтому иногда залезаю сделать что-нибудь на джаве и ловлю себя на мысли, что на пхп использую ООП не полностью. )
@KennyTutorials
@KennyTutorials 2 года назад
Как бы ты не пытался скрыть поля в Java, как не крути ты все равно можешь до них достучаться, потому что Java работает на JVM, а через JVM можно легко получить нужный класс и его поля используя рефлексию:) Увы это не С++ или C#, хотя в C# тоже есть вроде как рефлексия.
@user-rc5vv8sh5l
@user-rc5vv8sh5l 4 года назад
@SashaCrazyCrab
@SashaCrazyCrab 4 года назад
почему в java нету модификатора доступа "только чтение", очень удобная штука, как по мне в большинстве случаев подходит, я бы это слелал по умолчанию. В c# кстати есть readonly. А то часто приходится делать переменные private, а потом прописывать гетеры. А еще вопрос, почему в коде на java часто можно заменить как переменную обьявляют private, а потом прописывать и геттеры и сеттеры, не проще сделать ее паблик?
@SashaCrazyCrab
@SashaCrazyCrab 4 года назад
Почему в коде на java часто можно заменить как переменную обьявляют private, а потом прописывать и геттеры и сеттеры, не проще сдель ее паблик?
@akionka
@akionka 4 года назад
Потому что, в геттерах/сеттерах кроме гета/сета можно добавить дополнительную логику, плюс запрет на изменение того, что изменяться не должно по логике работы класса, внутренние переменные какие-нибудь или что-то вроде того
@katrinwilf3231
@katrinwilf3231 4 года назад
Когда ваш класс станет родительским и не факт что вы делали наследника,а вы решите поменять тип такого параметра, то ой как не проще будет. Чуть выше я приводила пример при замене поля возраст на дата рождения. Можно еще пример с весом, сделали вы класс товар где вес в кг. И поле веса паблик. А дальше вам говорят что нам еще для учета нужны граммы. А у вас уже наследников куча и в каждый теперь еще плюс одно поле засунуть придется. Или же весь учет на граммы перестроить и впихать в каждый наследник формулу перевода граммов в кг и обратно.
@augustjoyce3504
@augustjoyce3504 4 года назад
В подавляющем большинстве случаев это просто общепринятый бойлерплейт. Но лучше делать так (благо это несложно и генерируется любой ИДЕ), чтобы, если что, было легче поменять логику присвоения/получения или закрыть к чертям некоторые поля. Но вообще, джава - самый консервативный язык. Нигде вы не найдете столько бойлерплейта, как в джава коде.
@andriispirin3877
@andriispirin3877 4 года назад
Мне как JS разработчику так и не понятно в чем плохо все делать public. Можно описать какой-нибудь практический пример по этому поводу?
@katrinwilf3231
@katrinwilf3231 4 года назад
Рефакторинг и исправление ошибок. Бахнули вы класс Person, с полем age у которого интовое значение и данные которого сохраняются в базе данных. В результате в 2018 Анне 18 лет. Вопрос, сколько ей будет в 2019 и 2020м? Верно, все так же 18, т.к. хранить надо было дату рождения. И вот вы модифицировали базу и класс персон, теперь есть поле дата рождения и для родительского класса всё ок, чего не скажешь о наследниках, особенно сделанных не вами, а другими разрабами на своих проектах (Students, Customers, Employees и т.п.). Работая через методы у вас есть возможность решить проблему заменой алгоритма гетторов и сетеров в родительском классе, получить дату рождения расчетным путем и возраст (исходя из текущей даты). Сделав поле возраст публичным и призвав прописывать алгоритмы присвоения назначения в наследуемых классах вы вырыли себе и другим яму. Понятно что пример несколько упрощен с математической точки зрения, но общая суть необходимости сетеров и гетеров думаю ясна.
@Pewdew
@Pewdew 4 года назад
Дядя Сережа, расскажи про инкапсуляцию. Очень туго усваиваются все эти статики и не статики, и что делать совершенно непонятно((
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
расскажу, да
@ifastenko
@ifastenko 4 года назад
В продолжении темы. Когда целесообразно абстрактным классам давать final?)
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
Слабенькое продолжение. Никогда
@Oleksii_Leshchenko
@Oleksii_Leshchenko 4 года назад
Инкапсуляцию!
@sayhellotoroy
@sayhellotoroy 4 года назад
Не понимаю почему нельзя использовать классы утилиты(со статик методами). Ведь всякие типа Collections, Arrays существуют же. Создааать например какой-то парсер или что-то есть же смысл? Или лучше создать экземпляр такого класса и в многопоточности его защитить через ThreadLocal ?
@0imax
@0imax 4 года назад
Смотря какая задача. Если вся работа с парсером - это вызов одного метода с параметром - ну можно и в статик засунуть. Тогда при массовом использовании не придётся каждый раз создавать объект на каждый его вызов. Если же это парсер какой-то большой сложной структуры, у которого есть состояние, к которому нужно много обращений (и не дай б-г коллбэки), то статику лучше не использовать, получится многопоточность на ровном месте, в то время когда её можно было бы избежать, используя обычный класс.
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
если ты создал класс, наполненный утилитарными методами - запрети создание его экземпляра. Тогда всё будет ок.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
не будет ок. Проблемы многопоточности, поднятые с пола
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
@@SergeyNemchinskiy многопоточность - тема сложная, в двух словах не откоментишь.
@Mitreskotv
@Mitreskotv 4 года назад
Как тестировать private метод?
@rubik6169
@rubik6169 4 года назад
Если есть нужда тестировать приватный метод - надо выносить его в отдельный класс. Всё просто
@Mitreskotv
@Mitreskotv 4 года назад
есть public метод A, который вызывает приватные методы B,C. В тесте мне нужно доказать что в нужном мне случае вызвался B, и не вызвался C и наоборот. Можно сделать mock, на нем считать количество вызовов. Но вся беда в приватности методов.
@maxlich9139
@maxlich9139 4 года назад
Вопрос: что ты хочешь протестировать - интерфейс или алгоритм/код? Если интерфейс, то зачем пытаться как-то тестирова приватные методы? Если код/алгоритм, то да, надо выносить в отдельный класс
@ifastenko
@ifastenko 4 года назад
Если речь о java, то можно сделать метод package private. Тест разместить в том же пакете, что и класс содержащий тестируемый метод.
@ifastenko
@ifastenko 4 года назад
@@SkyAntins за reflection отрубаю руки коллегам программистам
@ii2562
@ii2562 3 года назад
У автоэлектриков, плавающая ошибка называется "спорадической"🤘
@EvgenOl
@EvgenOl 4 года назад
Я так понял, что статик используют когда нужна самая обычная функция. Та самая из функционального прокграммирования. Но вера и/или язык не позволяют просто создать функцию. Приходится городить объект со статик методом :)
@vitalienglin1079
@vitalienglin1079 4 года назад
)
@Simba_the_cat
@Simba_the_cat 4 года назад
Спасибо за понятное обьяснение) я как раз работаю с синглтоном)) есть плюсы в нём,а есть и минусы) 😝 Интересно про ООП, инкапсуляцию и вообще SOLID - в студию))) 😎😁😜
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
Это немного разные топики, но запишу и то и другое постепенно
@Simba_the_cat
@Simba_the_cat 4 года назад
Sergey Nemchinskiy спасибо 🙏🏻 жду с нетерпением)))
@user-qo3rr3kf9i
@user-qo3rr3kf9i 4 года назад
Maria Navalnaya нет плюсов у синглтона, это антипаттерн.
@user-kf1xn1dq9t
@user-kf1xn1dq9t 4 года назад
private или protected?
@user-py3yn5kp7q
@user-py3yn5kp7q 4 года назад
package-private
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
если ты хочешь, точнее, если ты планируешь, чтобы подклассы получили доступ к полю/методу - protected. Иначе - private причем поля всегда - private
@user-kf1xn1dq9t
@user-kf1xn1dq9t 4 года назад
​@@SecretRU-vidAgent это я к тому что между ними разницы особой нету, без наследования. Да, с протектед можно зафакапить код, но это так же легко как и с привате. Как по мне это отголосок той далекой эпохи когда все умудрялшись вкладывать в 40 килобайт програму, костыли для програмы и еще и пасхалку с сейлормун засунуть. Что то уровня "названия полей и методов должны быть короткими". Щас даже бюджетные процессоры могут работать с переменными с километровым названием. А если язык компилируемый то тут вообще не важно как ты переменную назоввешь, компилятор название выбросит все равно.
@nikitakravchenko6742
@nikitakravchenko6742 4 года назад
Сними видео о полиморфизме)
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
сниму
@SuperGamervideo
@SuperGamervideo 4 года назад
По умолчанию, когда пишу новый метод, ставлю private. Можно сказать, рефлекторно.
@nikitakravchenko6742
@nikitakravchenko6742 4 года назад
А я Public реылекторнг ставлю)
@user-ws7ps9bc1l
@user-ws7ps9bc1l 4 года назад
хорошие видео, но проф СЛЭНГ - плохой тон)
@HaiIag
@HaiIag 4 года назад
Спасибо за видео. Хотелось бы услышать о private package, редко вижу, но идеешка настоятельно рекомендуем его использовать. Плюс интересна тема полиморфизма
@qwertymangames1800
@qwertymangames1800 Год назад
Тем временем класс Programm в C#: привет Я static class, у меня все методы статичны
@DoctorMatt6
@DoctorMatt6 11 месяцев назад
В си шарп Program класс уже можно и не писать)
@yevhenvictorovich2288
@yevhenvictorovich2288 4 года назад
следующий выпуск - доступ к приватным полям через рефлексию
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
не надо вот это вот :)
@DoctorKrolic
@DoctorKrolic 4 года назад
Всегда есть reflection. Этим всё сказано...
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
за рефлекшн в продакшн коде тебе руки поотрывают
@DoctorKrolic
@DoctorKrolic 4 года назад
@@SecretRU-vidAgent А нафиг тогда он нужен?
@SecretYouTubeAgent
@SecretYouTubeAgent 4 года назад
@@DoctorKrolic он предназначен для создания фреймворков, IDE и т.п.
@Kastsiuchenka2Minsk
@Kastsiuchenka2Minsk 4 года назад
нац.кружка
@Alexey0795
@Alexey0795 4 года назад
блин, никто не написал, что музыка на фоне мешает. значит походу я один такой
@0imax
@0imax 4 года назад
Там есть музыка???))
@Alexey0795
@Alexey0795 4 года назад
@@0imax проверил еще раз, есть
@user-zs9ou6un9e
@user-zs9ou6un9e 3 года назад
Смешно, 3 года как новичок) Боюсь static классов как огня и по этому ими не пользуюсь)
@katerinak5997
@katerinak5997 2 года назад
То есть Вы не развиыаетесь
@user-zs9ou6un9e
@user-zs9ou6un9e 2 года назад
@@katerinak5997 нет(
@katerinak5997
@katerinak5997 2 года назад
@@user-zs9ou6un9e значит надо начинать)
@user-zs9ou6un9e
@user-zs9ou6un9e 2 года назад
@@katerinak5997 я бы и с радостью, но банк говорит что нужно выплатить кредит сначала ) а вообще уже начал учить Котлин. Начал писать своё приложение. UI мне уже сделали в подарок на ДН. Дело за малым )
@katerinak5997
@katerinak5997 2 года назад
@@user-zs9ou6un9e круто продолжайте в том же духе=)
@user-pg8ry1tm3t
@user-pg8ry1tm3t 3 года назад
Вообще вопрос ни хрена ни новичковый, связи иль агрегация. А вот хотелось бы услышать с точки зрения архитектуры мож в каких областях предпочтительней агрегировать, есть ли какие то эвристики или професс опыт на эту тему
@xrollup
@xrollup 4 года назад
Бугаенко ругает и клеймит static.
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
при всей моей нелюбви к Бугаенко - иногда он говорит банальные и поэтому верные вещи
@redneck_prm5429
@redneck_prm5429 4 года назад
питон смотрит на права доступа... с грустью
@vels2956
@vels2956 3 года назад
Статик есть константа, так мне кажется понятнее)
@vladimir0rus
@vladimir0rus 8 месяцев назад
статик можно изменить, это не константа. статик определает время жизни объекта - по факту он созадется при старте программы и разрушается при завершении. это скорее всего одинаково во всех языках.
@vels2956
@vels2956 8 месяцев назад
@@vladimir0rus согласен с вами
@Blade_Ruiner
@Blade_Ruiner 2 года назад
Зашита от дурака, упрощающая и усложняющая. Все равно, что сказать: "Вася, ты не имеешь права управлять самолетом!". А Вася никогда не хотел. и не захочет, и возможности у него такой не будет.
@spllit9212
@spllit9212 4 года назад
Может ли человек не обладающий талантом в математике освоить программирование на достойном уровне?
@nephritered4466
@nephritered4466 4 года назад
Может, конечно. Программирование - это инструмент, который подбирается под задачу. Если Вам не нужно работать с математическими моделями и комплексными вычислениями - не морочьте себе этим голову. Лучше ответьте на вопрос зачем лично Вам программирование? Как оно облегчит Вам жизнь, позволит высвободить время, заработать, получить удовольствие и т. п. (нужное подчеркнуть) - и вперед, навыки будете нарабатывать по дороге.
@spllit9212
@spllit9212 4 года назад
@@nephritered4466 если более конкретнее задать вопрос то нужны ли глубокие знания в математике чтобы освоить например Java для написания приложений под Андроид или JS под web разработку или например Python. Дело в том, что опыта в программировании я не имею. Занимаюсь пока что только с HTML и CSS и хотелось бы углубиться. Выучить какой нибудь ЯП а лучше несколько. И найти работу в этой сфере. И я задался вопросом насколько в программировании роляет знания математики при написании различных алгоритмов и т.д.
@nephritered4466
@nephritered4466 4 года назад
@@spllit9212 Рекомендую книгу Якова Файна «Программирование на Java для детей, родителей, бабушек и дедушек». Она развеет все сомнения. И обязательно посмотрите на канале у Сергея интервью с самим Яковом - это будет лучшее начало пути.
@user-gw1sv9hj4x
@user-gw1sv9hj4x 4 года назад
@@nephritered4466 Это был тот самый Яков? Хм, интересно
@augustjoyce3504
@augustjoyce3504 4 года назад
@@spllit9212 Что джава в Андроиде, что джс во фронт-энде не требуют познаний математики от слова совсем. Писать алгоритмы в обоих этих областях не приходится практически никогда. Математика нужна для разработки игр, дата сайенса, низкоуровнего программирования и всего такого. Для веба нужно знать фреймворки.
@thefatcat1375
@thefatcat1375 4 года назад
ну это уже слишком, на кого это расчитано?
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
другие комментарии почитайте и вылезайте, наконец, из информационного пузыря
@user-hp1wj2fk3z
@user-hp1wj2fk3z 4 года назад
Скользкий тип
@SergeyNemchinskiy
@SergeyNemchinskiy 4 года назад
так не смотрите, не мучайте себя
Далее
Чай будешь? #чайбудешь
00:14
Просмотров 837 тыс.
I Built 4 SECRET Rooms In ONE COLOR!
29:04
Просмотров 17 млн
Python Jobs UK -  June 2024
32:34
Просмотров 10
Правильные методы по Clean Code
28:29