Wpis z mikrobloga

@Yahoo_: Źle zadałem pytanie chyba...generalnie siedzie w C# kiedyś dawno PHP ale szybko się z tego wyleczyłem...w sumie to w teorii wiem co i jak - dziedziczenie nadpisywanie itp ale jestem po sporym projekcie i szczerze powiem w żadnym miejscu nie widzę sensownego zastosowania klas abstrakcyjnych i interfejsów :/
@masaj: interfejs - chcesz wysłać mail aktywacyjny do użytkownika. Tworzysz interfejs IEmailService z metodą SendMail(MailMessage msg) - gdzie MailMessage to klasa z propertisami : From, To, Title, Body. Implementujesz SmtpEmailService, który wysyła maila przy użyciu klienta SMTP. Po migracji na Azure chcesz wykorzystać Azure SendGrid - tworzysz nową implementację interfejsu IEmailService SendGridEmailService. Jeśli w swojej aplikacji korzystasz z kontenera do Dependency Injection to jedyna zmiana w twojej aplikacji będzie polegała na
@masaj: Interfejsy - chcesz mieć wiele implementacji jednej funkcjonalności. Np. pobieranie użytkowników z bazy, z pliku, po http - obojętnie. Masz metodę GetUser i nie obchodzi Cię skąd pochodzi User.
Klasa abstrakcyjna - j.w. tyle, że chcesz mieć jakąś standardową implementację - np. serializacja do JSON.
@masaj: Ja dodam jeszcze, że z klas abstrakcyjnych nie można tworzyć obiektów. Dopiero z klas, które po nich dziedziczą. Można tego używać jako zabezpieczenia typu "hej mordo, nie chcę, żebyś z tej klasy tworzył obiekty, - napisz proszę sobie swoją dziedziczącą po tej abstrakcyjnej i zaimplementuj ewentualne braki". :)