Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2018, 12:32   #51
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

а какой ответ на вопрос?
Мaкс вне форума Ответить с цитированием
Старый 09.07.2018, 12:38   #52
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Помимо интерфейсов, ничего что база это не файл и с базой работают не так, как с файлом? (наследование это is-a отношение, то есть Собака является Животным и т.п.)

Вы ж сами говорили, что база и файл это разные вещи.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.07.2018, 01:57   #53
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Что то с интерфейсом очень туплю, не понимаю зачем, так что скиньте пожалуйста пример без интерфейса и с ним, буду очень благодарен! В интернете не нашёл.
Интерфейсы надо понимать буквально.

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

Так же интерфейс может сводить во едино кучу различных классов таким образом, чтобы программист не парился мыслью проверять совместимость того, с чем он работает. Тот же логгер. Например Вам надо что-то записать в файл, в базу данных, отправить на веб-сервер, по TCP... все это делает куча разных классов, не связанных друг с другом. И как же было бы классно собрать эти классы в списке/массиве, сделать for i := 0... а после array[i].write('message... '), не парясь с кем мы собственно "говорим". Как же быть?
Дать общего предка? Геморрой, кучу кода переписывать, переделывать....

Так вот это все можно делать при помощи интерфейса. Пускай все реализуют ILogger, и отдают его вам простым присвоением в массив из ILogger. Если класс/его предок, реализует этот интерфейс, он вам его и отдаст, будете работать с кучей абсолютно разных классов, которые вообще не наследуют друг-друга, как будто бы у них общий предок.

Последний раз редактировалось Человек_Борща; 10.07.2018 в 01:59.
Человек_Борща вне форума Ответить с цитированием
Старый 10.07.2018, 11:32   #54
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от https://habr.com/post/30444/
Вы наверняка помните классический опыт с обезьяной, которую приучили гасить огонь водой из ведёрка; а потом поставили ведёрко на плот посреди бассейна, но обезьяна всё равно бегала по мостику на плот и черпала воду из ведёрка, вместо того, чтобы черпать воду прямо из бассейна. То есть обезьянка использовала класс Вода-в-Ведёрке вместо интерфейса Вода (и даже больше, скажу по секрету: вместо интерфейса Средство-для-Тушения).
Каким образом происходит реализация в интерфейсе? Там это нельзя делать! Что я не понял?
Мaкс вне форума Ответить с цитированием
Старый 10.07.2018, 11:45   #55
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если вы о реализации по умолчанию, то в некоторых языках функции в интерфейсе могут ее иметь.

А причем тут эта цитата?
И забейте уже на обезьянок и прочих животных, если начнете решать практические задачи вместо бессмысленных ФуБаров из учебника, то тогда и поймете.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.07.2018, 11:48   #56
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И забейте уже на обезьянок и прочих животных, если начнете решать практические задачи вместо бессмысленных ФуБаров из учебника, то тогда и поймете.
Ну когда буду создавать свои программы, это будет когда изучу учебник, тогда и пойму. По крайней мере надеюсь
Мaкс вне форума Ответить с цитированием
Старый 10.07.2018, 12:03   #57
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Никто не мешает делать это параллельно. Учебник не художественная литература, чтоб читать его по-порядку от начала до конца.

https://ru.hexlet.io/blog/posts/traps-learning
https://ru.hexlet.io/blog/posts/how-to-read-books
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.07.2018, 11:48   #58
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Код:
using System;
using System.IO;

namespace LoggerDemo
{
    class Program
    {
        static void Main( string[] args )
        {
            ILogger logger;
            if ( args.Length == 1 )
            {
                logger = new FileLogger( args[ 0 ] );
            }
            else
            {
                logger = new ConsoleLogger();
            }

            DoWork( logger );
            logger.Log( "End of work" );
            Console.ReadKey();
        }

        private static void DoWork( ILogger logger )
        {
            for ( int i = 0; i < 100; i++ )
            {
                if ( i % 10 == 0 )
                    logger.Log( $"I == {i}" );
            }
        }
    }

    public class FileLogger : ILogger
    {
        private readonly string pathToFile;

        public FileLogger( string pathToFile )
        {
            this.pathToFile = pathToFile;
        }

        public void Log( string message )
        {
            File.AppendAllLines( pathToFile, new[] { message } );
        }
    }

    public class ConsoleLogger : ILogger
    {
        public void Log( string message )
        {
            Console.WriteLine( message );
        }
    }

    public interface ILogger
    {
        void Log( string message );
    }
}
Вот тебе код с логгерами. В зависимости от параметров программа будет логировать либо в файл (путь до файла передается в командной строке), либо в консоль. Т.е. метод DoWork не знает что за класс реализует метод Log, он знает ИНТЕРФЕЙС для взаимодействия с этим классом. Поэтому метод DoWork перестает зависеть от класса реализации логгера, а начинает зависеть от интерфейса.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько дней уже не могу разобраться с кодом... timedo HTML и CSS 1 25.02.2013 09:49
уже несколько дней не могу решить две задачки badim4k Паскаль, Turbo Pascal, PascalABC.NET 0 16.12.2011 16:41
ДУЗЬЯ! НУЖНА ПОМОЩЬ ТЕХ, ХТО УЖЕ СТАЛКИВАЛСЯ С ЭТИМ! matfey Компьютерное железо 4 19.10.2009 19:09
Помогите школьнику kvx Microsoft Office Excel 6 20.09.2009 21:09