• Плохая практика менять объект ненапрямую?

    DollyPapper
    @DollyPapper
    Ben L,
    Если на Character есть getter к position то возможно менять позицию и без того чтобы использовать character.move. Если getter-a нет, то как использовать местоположение персонажа?

    Может я не верно понимаю о чем вы говорите, но для этого и придуманы getter и setter. Один отдает значение, другой его устанавливает. Почему у нас не должно быть getter'a и setter'a? Как вы будете менять позицию через getter? Если то как вы написали выше, то это очень жесткое нарушение инкапсуляции. Вообще говоря геттеры и сеттеры сами по себе её нарушают.

    Если переданный объект иммумабилен то не страшно что кто то изменит его.

    Если объект иммутабелен, то изменить его никто вообще не сможет, а не "нестрашно". Иначе он не иммутабелен. И вообще, как вы будете менять позицию персонажа, если объект позиции иммутабелен? Создавая на каждое перемещение копию объекта, но зачем нам это в данном случае я не совсем понимаю.
    Иммутабельность просто необходима когда у нас есть действительно разделяемые данные между разными сущностями, в нашем случае с персонажем, позиция конкретного персонажа "Darth Vader" это его и только его состояние. Посмотрите на себя как на объект. Ваше положение в пространстве координат вы делите со мной, с Васей, с Машей, с Петей? Нет. Это только ваше состояние, которое принадлежит вам как объекту. Оно в вас инкапсулировано. Почему Дарт Вейдер должен получать своё состояние о нахождении в пространстве из внешнего объекта?
  • Плохая практика менять объект ненапрямую?

    DollyPapper
    @DollyPapper
    Не понял почему нарушил???

    Ну да, вы получаете позицию через геттер, и у результата геттера сеттите значение. Это путает.
    Думаю я не понял правильно что вы имели ввиду под "целостен".

    Объект не инкапсулирует в себе все необходимые данные для его работы. Вы мутируете свойство обьекта позиции не через сам обьект, а через какую-то внешнюю переменную.
    В таком случае придется передовать в конструктор только примитивные данные (или иммутабельные объекты) чтобы не было возможно их менять снаружи, а в конструкторе создавать position для персонажа.

    Почему иммутабельные? Мы закрываем доступ к полям модификатором, и мутируем через спец. метод - сеттер, или еще как называем его, не важно.
    а в конструкторе создавать position для персонажа
    . Именно. При создании объекта мы передаем ему в конструктор начальную позицию, после чего мутируем через метод сеттер, или to или move или еще как называем метод перемещения.
  • Плохая практика менять объект ненапрямую?

    DollyPapper
    @DollyPapper
    Ben L, посмотрите вот этот доклад
    Многие критикуют конечно Егора за его радикальные взгляды на ООП, но как по мне, именно так ООП и должен выглядеть и это то куда эта парадигма и должна стремиться. Ключевая концепция которую продвигает Егор, что объект как сущность должен быть целостен, и сам должен содержать в себе и управлять своими данными, а нам должен быть доступен только его интерфейс.
  • Плохая практика менять объект ненапрямую?

    DollyPapper
    @DollyPapper
    Во первых вы теперь вообще нарушили логику наименования. Не getPosition, а setPosition нужно.
    Если вы обьект класса Position все равно создаете вне объекта персонажа, это в любом случае нарушение инкапсуляции. Да формально теперь мы не изменяем на прямую свойство, а делаем это через сеттер, но свойство данное всё так же глобально, и любой другой программист может спокойно из своего кода поменять позицию вашего персонажа и вы даже не поймете почему это случилось. То что вы сделали сейчас это Агрегация. При уничтожении вашего персонажа, когда например персонаж умрет, и на него больше не будет ссылок в коде GC соберет его. Но данные вашего персонажа все так же будут жить в памяти. Хорошей практикой является - делать свои объекты целостными, чтобы объект имел в себе все данные и методы для работы и сам решал как ему с этими данными поступать . Разделенное свойство имеет место быть например, если вы делаете стратегию и свойство позиции относится не к одному персонажу, а к группе юнитов. То есть при клике мышью мы задаем позицию для каждого отдельного юнита, который сам по себе может иметь собственную позицию, но при добавлении его в группу, должен направится туда же, куда и группа остальных выделенных в группу юнитов. Реализовать это можно например как написал ниже rPman . Ключевой момент который тут стоит понять, это что на данный ваш объект не целостен, и в данной задаче для того чтобы он был таковым предпосылок - нет. Простите если ответ немного сумбурен - жарко :) Если у вас появятся уточняющие вопросы пожалуйста пишите, постараюсь ответить.
  • Как узнать причину долгой загрузки linux mint?

    DollyPapper
    @DollyPapper
    mouLL, отметили решением. Решили проблему?
  • Скажите, средствами винды можно реализовать самооочистку памяти от кэша(мрут приложения при сьеденой 6,9гб памяти)?

    DollyPapper
    @DollyPapper
    organizer776, такое в принципе невозможно. Откуда ОС знает какие ресурсы могут приложению быть нужны, а какие нет. В Java GC освобождает ресурсы (переменные в которых что либо хранится) когда на них больше нет ссылок в программе. Если память сожрана, значит на неё есть ссылки, в случае java - она по этому память не освобождает. В случае языков без GC ситуация еще хуже. В роли GC выступает Петя который на говнокодил и память не освобождал.
  • Как именно развиваться начинающему Android разработчику?

    DollyPapper
    @DollyPapper
    Денис Загаевский, что для человека знакомого с ООП и организацией кода, знакомого с понятием абстрагирования может занять дольше двух часов в понимании MVC, MVP, MV* ?
    Серьезно, это не шутка, реально хотелось бы услышать ответ, узнать для себя что-то новое.
  • Как именно развиваться начинающему Android разработчику?

    DollyPapper
    @DollyPapper
    А какую ты хочешь рекомендацию? Как за 4 месяца пересобрать мышление? Увы, это нереально. Есть конечно истории, как люди и за 3 месяца с полного нуля работу находят, но во первых - каким путем? Во вторых, а не копирайт ли эти истории сотрудниками курсов, или чего-то подобного? В третьих - это обычно фронтэндеры. Да даже если и так - а долго они на работе задерживаются? Ты пойми, что чтобы стать разработчиком, нужно перестроить свое нестрогое человеческое мышление, в мышление строгое - аналитическое. Тут нельзя дать конкретных советов, как это сделать. Это приходит со временем упорного труда. И по факту тебе ужа дали несколько дельных советов. Учись и пиши код. Нет серебрянной пули, хоть некоторым по началу это не очевидно. Они думают, что люди по ту сторону монитора не совершают ошибок в коде, что их код хорошо организован в 100% случаев, что ими проблемы решаются на раз два. Нет. Человек с опытом, так же тупит над задачей которую он еще не делал ранее, так же делает банальные ошибки, так же говнокодит. Просто он упорно двигается дальше, и доводит дело до конца, потому что иначе нельзя, это и есть профессионализм. Стальные нервы, сильная воля и желание, вот и весь дельный совет.
  • Все говнокодеры?

    DollyPapper
    @DollyPapper Автор вопроса
    Adamos, понял вас. Значит просто проект еще в том состоянии, когда плыть есть куда, и качество кода зависит не только от самого разраба, а так же от срока жизни проекта, когда делать качественнее уже будет необходимо.
  • Все говнокодеры?

    DollyPapper
    @DollyPapper Автор вопроса
    Мой вопрос скорее не о говнокоде, а о людях которые говорят, что надо писать хороший, красивый, чистый код, которые обсуждают паттерны, но сами же даже не следуют MVC, который с самой своей базы зашит во фреймворк. Зачем люди на серьезной лице это обсуждают, если 90% хер на это все клали и делают как считают сами логичным, а не как они же и говорят "правильно"
  • Все говнокодеры?

    DollyPapper
    @DollyPapper Автор вопроса
    Хорошо, тогда я не понимаю, какой смысл обсуждать эти все паттерны, "технический долг", культуру разработки, принципы хорошего дизайна, цитировать дядюшку Боба, если ты в хер не ставил все эти принципы и пишешь руководствуясь только своей внутренней логикой, как это должно быть. Вот этот момент мне скорее не понятен.
  • Как узнать причину долгой загрузки linux mint?

    DollyPapper
    @DollyPapper
    Убрать их никуда нельзя, это этап загрузки изначальной. 1) загружается прошивка BIOS/UEFI(firmware)
    2)загрузчик(loader), grub в вашем случае, и далее по списку, что нас не особо интересует. Загрузка grub в 5 секунд конечно не критична, это нужно сравнить с тем как он на вашем железе грузился раньше.
    firmware же в 26 секунд простоя это пздц. По скольку firmware грузится еще до того, как загрузится не то что ядро а даже загрузчик, т.е. в момент как грузится firmware на вашем компьютере еще даже нет линукса. Это вводит меня в ступор и мне даже сложно что-то предположить. Единственное, что могу предположить - у вас в системе установлен режим (BIOS/UEFI/Legacy CSM) отличный от разметки дисков. Т.е. у вас возможно загрузка стоит UEFI а диски размечены в MBR или наоборот. Попробуйте копнуть в эту сторону. Еще попробуйте поискать в биосе опцию Skip POST или что-то типа того, это может решить симптом долгой загрузки firmware, но не проблему как таковую, потому что проблема изначально была вызвана сбоем при обновлении в ОС и как это могло повлиять на настройки прошивки, мне опять же сложно предположить. Начните с проверки сопоставления метода загрузки и формата дисков как я описал выше. А вообще я бы лично просто систему переустановил, если вам нужно просто чтобы компьютер нормально заработал, а не важен сам процесс починки.
  • Можно ли увидеть программный код?

    DollyPapper
    @DollyPapper
    pfemidi, да, просто упомянул - для справки, т.к. мне кажется сам вопрос - для справки :)
  • Прыгаю с языка на язык, с одной сферы в другую, как сфокусироваться на одном языке?

    DollyPapper
    @DollyPapper
    Мотивация это полная туфта. Мотивированным всё время быть невозможно. А когда наш ТС осознает, что работа программистом это не - пилить проектик для себя пока интерес не пропадет, а рутинная работа 90% времени, вот тут вообще тоска и печаль начнется. Дисциплина и усидчивость, всё остальное - мусор. Мотивацию можно использовать как старт для чего либо, мол - О, какая классная идея для проекта который я могу написать на %имя_языка%. Садишься писать на этом языке. Через пару дней, недель, месяцев мотивация пропадет. Вот тут в игру вступает дисциплина и ответственность.
  • Как работают установщики OS Linux?

    DollyPapper
    @DollyPapper Автор вопроса
    В общем почти так и делаю, за исключением обновления пакетов, т. к. это не требуется, по простой причине - есть довольно специфический корп. софт, который работает на либах которых даже в репозитории нет. И есть очень не нулевая вероятность, что дальше этого софта будет еще больше. По этому пока без апдейта.

    А вот касательно gzip системы и нюансов этого - а можно подробней? Как раз про эти нюансы и был вопрос.
  • Как работают установщики OS Linux?

    DollyPapper
    @DollyPapper Автор вопроса
    Adamos, Adamos, до столь очевидной вещи я почему то не додумался... Спасибо за совет.
  • Как работают установщики OS Linux?

    DollyPapper
    @DollyPapper Автор вопроса
    Данный линукс делается для тонких клиентов под VDI. Инженеры ТП накатывают исошник с флешки в ручную.
  • Написать программу, которая определяет существует ли треугольник со сторонами a b c С++?

    DollyPapper
    @DollyPapper
    galaxy, давно оператор && (И) и ||(ИЛИ) местами поменяли? Треугольник существует если сумма любых двух его сторон больше третьей. Соотвественно A+B >= C ИЛИ A+C >= B и т.д.