Популярні дописи з цього блогу
Посчитать количество вхождений каждого слова в текстовом файле
Одному из кандидатов на дожность программиста предложили решить задачу: Написать программу на C#, подсчитывающую количество вхождений каждого слова в текстовом файле. Его решение показывать не буду, у него нет большого опыта разработки на этом языке, но после того как мы обсудили его решение, он попросил мое решение. Вот оно. Кто напишет лучше? using System; using System.Collections.Generic; using System.IO; using System.Text; class Program { static void Main() { SortedDictionary < string , int > words = new SortedDictionary< string , int > (); foreach ( string word in WordIterator(Console.In)) { int count; words[word] = words.TryGetValue(word, out count) ? count + 1 : 1 ; } foreach (KeyValuePair< string , int > pair in words) Console.WriteLine( "{1,8} {0}" , pair.Key, pair.Value); } static IEnumerable< string > WordIterator(TextReader sr) { StringBuilder sb = new StringBuilder(); int ch; while ((ch = sr.Read
Истинное наследование или агрегация
Один из ключевых "столпов" ООП - наследование. Основная идея в наследовании интерфейсов или реализации базового класса. Я в своей жизни сталкивался с двумя идеями реализации наследования:
Истинное наследование (в стиле C++, Delphi) Агрегация или включение (в стиле Visual Basic и COM вообще) Рассматриваю случай, когда класс-наследник обязан предоставлять те же интерфейсы, что и родительский, потому пишу только про агрегацию.
Итак, наследование и агрегация.
У каждого из них есть достоинства и недостатки. Наследование обычно прямо поддерживаеться языковыми средствами (сам язык, IDE, отладчики) и естественно воспринимается разрабочиками, а агрегирование приходится "привязывать" сбоку (хотя в расширяемых языках, например Лисп, эту задачу можно решать только один раз) и, что хуже, - объяснять идею многим разработчикам. В двух словах, идею агрегации можно свести к созданию обертки вокруг класса, в каждом методе которой мы вызываем соответствующий метод наслед
Коментарі