Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 09.07.2018, 13:32   #51
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 413
Репутация: -5
По умолчанию

а какой ответ на вопрос?
Мaкс вне форума   Ответить с цитированием
Старый 09.07.2018, 13:38   #52
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,109
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

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

Вы ж сами говорили, что база и файл это разные вещи.
Alex11223 на форуме   Ответить с цитированием
Старый 10.07.2018, 02:57   #53
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,447
Репутация: 2769
По умолчанию

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

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

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

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

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

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

icq: 512-765
skype: alexp.frl
По умолчанию

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

А причем тут эта цитата?
И забейте уже на обезьянок и прочих животных, если начнете решать практические задачи вместо бессмысленных ФуБаров из учебника, то тогда и поймете.
Alex11223 на форуме   Ответить с цитированием
Старый 10.07.2018, 12:48   #56
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 413
Репутация: -5
По умолчанию

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

icq: 512-765
skype: alexp.frl
По умолчанию

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

https://ru.hexlet.io/blog/posts/traps-learning
https://ru.hexlet.io/blog/posts/how-to-read-books
Alex11223 на форуме   Ответить с цитированием
Старый 12.07.2018, 12:48   #58
Скарам
Дружите с Linq ;)
Участник клуба
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Адрес: Москва
Сообщений: 796
Репутация: 359
По умолчанию

Код:

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 перестает зависеть от класса реализации логгера, а начинает зависеть от интерфейса.
__________________
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:55.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru