16. EuGen - 26 Сентября, 2011 - 10:11:15 - перейти к сообщению
Почитайте про API и то, какое удобство оно предоставляет. Представьте так же, что Вы проектом занимаетесь не водиночку. Ну и всякие модные (но от того не менее актуальные) понятия как масштабируемость, юзабилити, переносимость кода.
17. caballero - 26 Сентября, 2011 - 10:17:01 - перейти к сообщению
Цитата:
А в остальных случаях всегда хватало абстрактного класса, множественное наследование нигде пока не пригодилось
Абстрактный клас не всегда подходит. Если столкнетесь на яве с серверами приложений и прочими продвинутыми фишками сразу все поймете.
(Добавление)
Цитата:
Почитайте про API и то, какое удобство оно предоставляет.
Нет никакой прямой связи между API и интерфейсами. Большинство API (виндовс API, API для серверов БД) чисто функции. Наличие интерфейсов в API
не дало бы возможности работать с оным на разных языках программирования.
Цитата:
Ну и всякие модные (но от того не менее актуальные) понятия как масштабируемость, юзабилити, переносимость кода.
Набор модных слов из которых тоже не вытекает связь с интерфейсами.
Apache и Mysql написаны на простом С даже без классов не то что интерфейсов и замечательно масштабируются и переносятся. Более того именно потому они и написаны на голом C.
Классы и интерфейсы ограничивают применение в пределах одного языка программирования. Поэтому API на PHP или Java может быть использовано только PHP или Java.
18. EuGen - 26 Сентября, 2011 - 10:30:34 - перейти к сообщению
Читайте внимательно. Здесь связь "причина"-"следствие", а не равносильность элементов.
И судя по
И судя по
caballero пишет:
Вы все же не читали об этом предмете, или читали невнимательно.
Нет никакой прямой связи между API и интерфейсами
19. Stierus - 26 Сентября, 2011 - 15:33:26 - перейти к сообщению
Цитата:
Бред. Наследование - это класс-потомок приобретает методы и свойства родительского класса (уже реализованы конкретные методы, которыми можно пользоваться). Интерфейс - тупо шаблон, это декларативная вещь.класс не поддерживает множественное наследование и для решения этой проблемы используют интерфейсы
Пример для понимания:
есть функция test($stringToSave, saver $logger); у которой первый аргумент - строка, которую нужно сохранить, а второй аргумент - класс, который и будет сохранять. Что бы все это работало без сбоев, мы должны быть уверены, что вторым параметром функции пойдет именно объект класса, а не массив или еще одна строка, а помимо того, мы должны быть уверены что этот объект действительно сможет сохранить строку. Вот для этого и делаются интерфейсы:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- interface saver {
- function log($string); // У всех классов, реализующих этот интерфейс, 100% будет ф-я log с одним аргументом
- }
- class loggerInDb implements saver{
- //тут сохранение строки в бд
- }
- }
- class loggerInFile implements saver{
- //тут сохранение строки в файл
- }
- }
- function test($stringToSave, saver $logger){
- $logger->log($stringToSave);
- }
- $fileSaver = new loggerInFile();
- $DbSaver = new loggerInDb();
- $bred = new SomeAnotheClass();
- test('test', $fileSaver);
- test('test', $DbSaver);
- test('test', $bred); //Тут будет ошибка, ибо SomeAnotheClass не поддерживает необходимый интерфейс
Отличие интрефейса от абстрактного класса ровно в том же - абстракный класс - это класс-родитель, от которого приобретаются свойства и методы + он может быть только один.