Vim / vi Практические советы для освоения системы

Хуан,

Мне нравится думать о интерфейсах как способе охарактеризовать класс. Определенный класс породы собак, скажем, YorkshireTerrier, может быть потомком родительского класса собак, но он также реализует IFurry, IStubby и IYippieDog. Таким образом, класс определяет, что такое класс, но интерфейс сообщает нам об этом.

Преимущество этого заключается в том, что он позволяет, например, собрать все IYippieDog и выбросить их в мою коллекцию Ocean. Поэтому теперь я могу охватить определенный набор объектов и найти те, которые соответствуют критериям, на которые я смотрю, не слишком внимательно изучая класс.

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

Эта мысль, хотя и противоречит идее, что каждый класс должен иметь интерфейс, и вы должны кодировать интерфейс. Все в порядке, но в итоге у вас много интерфейсов к классам, и это путает вещи. Я понимаю, что идея состоит в том, что это действительно не стоит ничего делать, и теперь вы можете легко и легко переключаться между собой. Однако я считаю, что редко это делаю. В большинстве случаев я просто изменяю существующий класс на месте и имею те же самые проблемы, которые я всегда делал, если публичный интерфейс этого класса нуждается в изменении, за исключением того, что теперь мне нужно изменить его в двух местах.

Поэтому, если вы думаете, как я, вы определенно скажете, что Cat and Dog - это IPettable. Это характеристика, которая соответствует их обоим.

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

Скажем, я хочу собрать все классы Animal и поместить их в контейнер Ark.

Или они должны быть млекопитающими? Возможно, нам нужна какая-то крестовая доильная фабрика?

Нужно ли вообще связываться с ними? Достаточно ли просто знать, что они оба являются IPettable?

Я часто чувствую желание получить целую иерархию классов, когда мне действительно нужен только один класс. Я делаю это в ожидании, когда-нибудь мне это понадобится, и обычно я никогда этого не делаю. Даже когда я это делаю, я обычно нахожу, что я должен многое сделать, чтобы исправить это. Это потому, что первый класс, который я создаю, - это не Собака, мне не повезло, это вместо Платипа. Теперь вся моя иерархия классов основана на странном случае, и у меня много потерянного кода.

В какой-то момент вы также можете обнаружить, что не все кошки имеют IPettable (например, этот голый). Теперь вы можете перенести этот интерфейс на все подходящие производные классы. Вы обнаружите, что гораздо менее резкое изменение, которое внезапно вызывают кошки, больше не происходит из PettableBase.

21
задан 4 revs, 3 users 100% 26 June 2009 в 04:54
поделиться

31 ответ

Никто не упомянул обильные ctags? Google и установите его; намного лучше, чем стандартные ctags, которые вы, вероятно, имеете. Чтобы использовать его, перейдите в корневой каталог вашего проекта и введите

:! ctags -R.

Создает базу данных всего вашего проекта ... java, c ++, python, ruby, javascript, что угодно, в файле с именем tags.

: помочь ctags для множества команд, слишком много для суммирования, для использования сгенерированных тегов. Поместите курсор на имя функции, введите CMD], чтобы открыть файл, который ее определяет. Еще много таких команд. Вскоре становится второй натурой ... почти так же хорошо, как IDE (и VIM никогда не подводит вас, как это часто делает затмение.

0
ответ дан 29 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: