@oop_ru

Страница 201 из 785
Sergey
06.05.2017
19:06:15
но я кажется понял о чем ты, ты про то что у нас есть поведение объекта "сейчас" и оно может в какой-то момент времени не соответстовать тому что надо.

Andrey
06.05.2017
19:07:10
Чот вы хрень какую-то обсуждаете.

Sergey
06.05.2017
19:07:25
Чот вы хрень какую-то обсуждаете.
действительно, надо обсуждать как контроллеры клепать

Evgeniy
06.05.2017
19:08:05
пришли к тому что наследование между классами не нужно?

Google
Evgeniy
06.05.2017
19:08:08
опять

оставляем наследование между интерфейсами

da horsie
06.05.2017
19:08:33
Оно строится на основе требуемого. Наверное.
Должно строиться. А по факту как повезет :)

Evgeniy
06.05.2017
19:08:35
а наследование между классами только внутри модуля и скрываем его от людей)))

и стараемся от него избавиться

потому что наследование это сильная связь, а связанные вещи нам не нужны

Aliaksandr
06.05.2017
19:12:46
Особенно сильно.

Evgeniy
06.05.2017
19:12:46
а когда два класса из разных модулей наследуются => они (классы) связаны => модули этих классов тоже связаны

Артур Евгеньевич
06.05.2017
19:16:49
Парни кстати про дядю боба я ен понял

Быстрая разработка программ. Принципы, примеры, практика. — Вильямс, 2004

Принципы, паттерны и методики гибкой разработки на языке C#. — Символ-Плюс, 2011.

это просто разные издания одной книги что ли?

Sergey
06.05.2017
19:32:27
Дядя боба на тему квадратов

Google
Sergey
06.05.2017
19:32:28
https://youtu.be/TMuno5RZNeE?t=1h17m10s

da horsie как раз то о чем ты говоришь

и пример с адвакатами там же

da horsie
06.05.2017
19:56:04
da horsie как раз то о чем ты говоришь
Так я как раз про это (и другие похожие) видео говорю

Sergei
06.05.2017
22:09:18
Кто может нормально объяснить почему квадрат нельзя от прямоугольника наследовать? Стандартные объяснения знаю, но они меня не убеждают ни капли. Ну или объясните почему этот пример как пример дают )
Потому что ты нарушаешь "принцип" is A т.е. является. Обычная логика: является ли квадрат прямоугольником? нет! Является ли квадрат фигурой? да! Значит нужно наследоваться от абстрактной фигуры, а не от реализации.Нельзя наследоваться от него, только для того чтобы получить какое то уже готовое поведение и реализацию. Это ломает инкапсуляцию обьекта, получается обьект который в определённые моменты будет работать правильно, но иногда может ломаться. Так же если в предке, прямоугольнике были какие либо методы которые не нужны квадрату, но они в нём присутствуют. т.к. при прямом наследовании нет возможности от них отказаться. А что будет если за них дёрнуть? Это сломает предпологаемое поведение квадрата.

пример из реальной жизни: стек является вектором? нет. Так почему стек наследован от вектора? https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html

а что будет если я дёрну какой нибудь из методов которые в векторе, что будет? сломается стек или нет? Здесь нужно было определённое поведение для работы стека, поэтому часть этого поведения взяли из вектора, но вектор это уже часть реализации стека которая торчит наружу, вектор должен быть полем внутри стека, которому будет делегироватсья вся работа.

Sergei
06.05.2017
22:20:21
https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html Здесь то же самое, класс Properties который по задумке позволяет работать только с парами String String унаследован от Хештаблицы которая позволяет сетить в себя любые обьекты, допустим я создаю Пропертис, насетю туда любых обьектов и буду читать оттуда String? что будет? Properties не позволит мне этого делать только в том случае если он НЕ БУДЕТ hashTable который может принимать любой обьект. Т.к. в текущей ситуации этот принцип нарушен и мне как клиенту этого класса доступны методы как хештаблицы так и пропертис.

Обычная логика как раз говорит, что квадрат является прямоугольником
как раз так думали те кто писал некоторые классы jdk 1.0

Aleh
06.05.2017
22:48:37
К тому, что это все нереально декорировать даже вопросов нет)

Sergei
06.05.2017
22:54:15
Вопросы у дизайну жавы есть со всех сторон
В основном это всё из самых первых версий идёт, потом уже такого стало намного меньше, но старые классы никуда не делись по причине обратной совместимости.

Вопросы у дизайну жавы есть со всех сторон
Это уже понове намного почти тот же jdk (javafx) https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ListView.html

ListView constructor is not feasible, the recommended approach for setting the items is to simply call: ObservableList<T> content = ... listView.setItems(content); The end result of this is, as noted above, that the ListView will automatically refresh the view to represent the items in the list. Another approach, whilst accepted by the ListView, is not the recommended approach: List<T> content = ... getItems().setAll(content); The issue with the approach shown above is that the content list is being copied into the items list - meaning that subsequent changes to the content list are not observed, and will not be reflected visually within the ListView.

т.е. у тебя есть два способа насетить итемы в лист но ты не трогай другой метод , т.к. он поломает твой лист)

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

Что самое интересное что в TableView есть метод с такой же самой сигнатурой но там всё наоборот, этот метод setItems() не обновляет визуальное состояние TableView, нужно наоборот держать ссылку на ObservableList снаружи и уже через манипуляции с этим листом изменять отображение TableView

Firstly, a TableView instance needs to be defined, as such: TableView<Person> table = new TableView<Person?); With the basic table defined, we next focus on the data model. As mentioned, for this example, we'll be using a ObservableList. We can immediately set such a list directly in to the TableView, as such: ObservableList<Person> teamMembers = getTeamMembers(); table.setItems(teamMembers);

Google
Paul
07.05.2017
05:18:44
И реализовывать его для вектора. Ну и для всяких связных списков, если угодно.

В этом и проблема классовых языков, что вот так просто разделить реализацию по интерфейсам нельзя: все будет вместе и все тут. В отличие от тайпклассов. Ну, то есть описать-то интерфейс можно, но реализовывать его надо обязательно по месту

Алексей
07.05.2017
07:35:46
Обычная логика как раз говорит, что квадрат является прямоугольником
Квадрат имеет те же свойства что и прямоугольник (+ ряд своих) но квадрат не являеться прямоугольником и наоборот

Sergei
07.05.2017
07:36:36
Sergey
07.05.2017
07:36:56
по определению

p.s. чет зацепила всех эта тема

> Квадра́т — правильный четырёхугольник (c) википедия

Алексей
07.05.2017
07:38:17
Сам себе противоречишь.

Sergey
07.05.2017
07:38:19
а то что тип "квадрат" и тип "прямоугольник" ничего общего не имеют между собой это да

Gen
07.05.2017
07:39:06
Стока флейма из ничего) Тут же все очевидно. Квадрат и прямоугольник - два разных класса. Возможно даже они имплементят один интерфейс IПрямоугольный. Можно реализовать приведение типов Квадрат -> Прямоугольник. Можно и наоборот Прямоугольник -> Квадрат, но нужно понимать что такое преобразование возможно только в отдельных случаях (при a = b), а в остальных будет вываливаться исключение

Алексей
07.05.2017
07:39:13
может ты?)
Еще раз я сказал что квадрат не являеться прямоугольником и наобором (прямоугольник не квадрат)

Поэтому и наследоватся нельзя

Paul
07.05.2017
07:46:03
Собственно, определение в математике либо через прямоугольник, либо через ромб дается

Gen
07.05.2017
07:47:12
про параллелограмм забыли

Paul
07.05.2017
07:47:24
Он тут не причем

da horsie
07.05.2017
07:47:26
Наркоманы. Хватит уже :)

Paul
07.05.2017
07:49:27
Проблема здешних обувателей же в другом: они яро уверовали, что отношение "is-a" имплементится исключительно наследованием (данных)

Google
Paul
07.05.2017
07:50:29
Ну ок

Sergey
07.05.2017
07:50:40
и да, проблема именно в том что ты сказал)

что наследование не воспринимается как вид зависимости, а если это просто вид зависимости то вместо подтипов можно делать просто отдельные типы вложенные в другой. Что generalization воспринимается как "is a"

Sergey
07.05.2017
07:53:02
Ну а во что ты вложешь квадрат: в прямоугольник или ромб?
ни во что, конкретно в этом примере вкладывать смысла нет

da horsie
07.05.2017
07:53:08
Есть два стула...

Admin
ERROR: S client not available

Paul
07.05.2017
07:53:19
Да стул один

Просто интерфейс квадрат наследует и интерфейс ромб и прямоугольник, вот и все

Sergey
07.05.2017
07:54:44
у квадрата и ромба setSize а у прямоугольника setWidth и setHeight

da horsie
07.05.2017
07:55:09
Просто интерфейс квадрат наследует и интерфейс ромб и прямоугольник, вот и все
До тех пор пока интерфейс прямоугольник не начнет требовать возможность изменять ширину и высоту независимо.

Sergey
07.05.2017
07:55:29
ну то есть да, если такое не требуется - то норм

а различия делать отдельными типами

Paul
07.05.2017
07:55:37
Он не может требовать что изменять

Sergey
07.05.2017
07:55:48
он декларирует поведение

либо поясни чуть подробнее свою мысль

Google
da horsie
07.05.2017
07:56:20
Он не может требовать что изменять
Вообще да, но в данном случае вопрос именно про независимость измерний

Paul
07.05.2017
07:56:53
Это не поведение прямоугольника. Интерфейс прямоугольника и вообще может быть пустым

da horsie
07.05.2017
07:57:16
Paul
07.05.2017
07:57:22
Ну, все-таки не интерфейс, а типаж, давайте уже нормально и изъясняться

da horsie
07.05.2017
07:57:37
Не типаж, а поведение

Paul
07.05.2017
07:57:55
Нет

Поведение вообще странное слово и к теории типов отношения не имеет

Sergey
07.05.2017
07:58:34
давай типажи)

Paul
07.05.2017
08:00:47
Конечно, если вы запихнули change_size (w, h) в прямоугольник, то квадрат им уже не будет (а отличие от отдельных set_width и set_height)

Paul
07.05.2017
08:01:59
Ну, во-первых, нет size, есть отдельно понятие высоты и ширины

А, во-вторых, что значит изменить их?

Это ведь другой прямоугольник становится

Sergey
07.05.2017
08:02:39
Ну, во-первых, нет size, есть отдельно понятие высоты и ширины
у квадрата/ромба нет отдельного понятия высоты и ширины

Paul
07.05.2017
08:03:19
у квадрата/ромба нет отдельного понятия высоты и ширины
Ты можешь говорить о высоте квадрата, если введена ось

Даже о длине любой стороне говорить можешь, потому что квадрат четырехугольник

Это ведь другой прямоугольник становится
Но я все равно настаиваю на этом

Sergey
07.05.2017
08:04:29
Но я все равно настаиваю на этом
ты предлагаешь решить проблему сделав объекты имутабельными? ну то есть если ты поменял ширну квадрата и он перестал быть квадратом он просто возвращает инстанс прямоугольника?

это же не решает проблему

Paul
07.05.2017
08:04:50
Ты не меняешь, там просто нет методов для изменения

Sergey
07.05.2017
08:04:57
ну понятно

Страница 201 из 785