Często spotykałem się z terminem „programowanie interfejsu zamiast implementacji” i myślę, że rozumiem, co to znaczy. Ale chcę się upewnić, że rozumiem, jakie są korzyści i możliwe wdrożenia.
„Programowanie interfejsu” oznacza, że tam, gdzie to możliwe, należy odwoływać się do bardziej abstrakcyjnego poziomu klasy (interfejs, klasa abstrakcyjna, a czasem do jakiejś nadklasy), zamiast do konkretnej implementacji.
Typowym przykładem w Javie jest użycie:
List myList = new ArrayList();
zamiast ArrayList myList = new ArrayList();
.
Mam dwa pytania dotyczące tego:
Chcę się upewnić, że rozumiem główne zalety tego podejścia. Myślę, że korzyści to przede wszystkim elastyczność. Zadeklarowanie obiektu jako odniesienia wyższego poziomu, a nie konkretnej implementacji, pozwala na większą elastyczność i łatwość konserwacji w całym cyklu programowania i w całym kodzie. Czy to jest poprawne? Czy elastyczność jest główną korzyścią?
Czy istnieje więcej sposobów „programowania do interfejsu”? Czy też „deklarowanie zmiennej jako interfejsu, a nie konkretnej implementacji” jest jedyną implementacją tej koncepcji?
Nie mówię o interfejsie konstruktora Java . Mówię o zasadzie OO „programowanie do interfejsu, a nie implementacja”. Zgodnie z tą zasadą światowy „interfejs” odnosi się do dowolnego „nadtypu” klasy - interfejsu, klasy abstrakcyjnej lub prostej nadklasy, która jest bardziej abstrakcyjna i mniej konkretna niż bardziej konkretne podklasy.