Все мы знаем три основных принципа ООП: Инкапсуляция, Наследование и Полиморфизм. А еще есть этот четвертый принцип: Абстракция данных; хотя это не всегда упоминается как самостоятельный принцип, так как он тесно связан с инкапсуляцией. Сегодня я собираюсь обсудить простой случай, чтобы продемонстрировать силу и необходимость наследования.
Предположим сценарий: вы работаете над приложением, которое должно выполнять вызов сервера асинхронно и не оказывает прямого влияния на пользовательский интерфейс. Но когда сервер возвращает ответ, вы должны внести некоторые изменения в свое приложение независимо от существующего пользовательского интерфейса.
Теперь на подробном примечании; у вас есть три пользовательских интерфейса, представленных классом A, B и C. Они находятся в стеке навигации: A является корневым классом (отображается первым), а классы B и C помещаются в стек в зависимости от взаимодействия с пользователем (верхний класс из стека доступен для взаимодействия с пользователем). Когда приложение запускается с классом A, доступным для взаимодействия с пользователем, вызов сервера выполняется асинхронно с местоположением пользователя (широта и долгота), и сервер отвечает набором ближайших достопримечательностей, которые могут заинтересовать пользователя. Пользователь. Теперь вот загвоздка: вы должны перехватывать ответ независимо от того, какой класс в данный момент доступен для взаимодействия с пользователем (вершина стека!); то есть не имеет значения, находится ли класс A, B или C на вершине стека (в памяти!); вы должны поймать ответ, отформатировать его и отобразить на текущем экране! Теперь, как вы это делаете?
Ну, есть много возможных способов, но использование наследования может быть самым простым и удобным. Как мы это делаем? Запомните определение:
Объекты могут быть связаны друг с другом отношениями "имеет", "использует" или "является".
«Является ли» — это способ наследования объектных отношений. Теперь, если мы можем убедиться, что все классы A, B и C являются объектами класса S, мы он всегда в памяти и поверх стека! Правильно?
Итак, мы создаем суперкласс S и пишем два метода:
1. public void makeServerCall() 2. public void serverCallWithResponse (bool success, String[] nearbyLocations, Error err)
И мы делаем класс A, B и C подкласс класса S. Это гарантирует, что общедоступные методы 1 и 2 доступны и могут быть переопределены всеми из них (класс A, B и C).
Теперь из класса A вызовите метод 1, чтобы сделать вызов сервера и во всех трех классах (A, B и C. >) переопределить метод 2. Это гарантирует, что независимо от текущего пользовательского интерфейса мы получим ответ сервера и действуем соответствующим образом, следовательно, решим проблему!
Я очень надеюсь, что это кому-то поможет, и я планирую писать больше о таких мелочах! Любые предложения, лучший подход или любая критика приветствуются и ценятся!🙂
Ваше здоровье!
Нравится:
Нравится Загрузка…
Связанный
Первоначально опубликовано на сайте codewithshabib.com 18 августа 2016 года.