Абстрагирование метод: 1.2. Абстрагирование

поэтическое абстрагирование • 101 метод развития креативности

23.07.2015 vetas

Sticky Post By vetas On 23.07.2015

Что вы слышали о поэтическом абстрагировании? Ха! До сегодняшнего дня вы вообще не слышали про такой метод развития креативности. Возможно, что-то слышали про прогрессирующее абстрагирование Хорста Гешки. Но это не совсем то, потому что сегодняшний метод про поэтов, хотя и немного абстрактных…

Это отличный симбиоз двух явлений, пришедших к нам из Древней Греции (у этой страны было золотое время!). Метод настолько универсальный и рабочий, что применим почти для любых целей: от разработки мощной стратегии чего-угодно (благодаря первому элементу — абстрагированию, переходу от частного к общему), заканчивая разработкой креативных концепций чего-угодно (благодаря поэзии, второму элементу метода).

Воспользовавшись раз, пользуюсь и сейчас! Слышали такое?

Как работает поэтическое абстрагирование?

Ключ к решению вашей задачи — иная плоскость её рассмотрения. Вы всегда можете сформулировать свой вопрос иначе, и во время этой формулировки отойти чуть дальше, на более общий уровень. В итоге, вы должны нарисовать офигенный mindmap вашей проблемы, со стихами! Вот вам алгоритм:

1. определите предмет вопроса, напишите про него стих
2. перейдите на один уровень абстракции выше, напишите про него стих
3. есть решение? Отлично!
4. нет решения? см.2

Пример

1. Завелась мышь, а на котов аллергия? Как вывести мышь?

Мышка-мышка-мышка,
Зачем ты завелась?
Подойди поближе,
У тебя есть… мазь?!

2. Мышь — это живое существо (первая абстракция).

Тёплое дыханье,
Ласковый оскал,
Выпьем за знакомство,
Где же твой бокал?!

3. У живых существ есть чувства (вторая абстракция).

Не пищи так грустно,
Щас не до тебя,
На душе так пусто!
Пей давай до дна…

На чувства можно давить! Решение вашей проблемы найдено — надавите на чувства мышке, поговорите с ней, расскажите ей, что обожаете мышек, но почему-то они все у вас дохнут, покажите фотографии дохлых мышей. Включите «Том и Джерри», заплачьте… Думаю, после этого она сама и уйдёт.

Кого взять с собой?

Метод позволяет принимать участие неограниченному количеству людей, но где вы столько возьмёте? Боюсь, даже на всей Земле столько нет. Пригласите для начала digital-стратега BBDO и заведующего Окской птицефабрикой. Что?! Ну хорошо, пригласите кого можете.

Что понадобится?

— свободный лот времени до 60 минут
— временно свободное тихое помещение
— абсолютная свобода мысли
— письменные принадлежности (лучше записывать и зарисовывать ваши мысли)

Какие альтернативы существуют?

— Веер концепций де Боно
— Ментальные карты
— Можно вместо поэзии использовать грейпфрут

Минусы и плюсы

Главный минус — у вас может ничего не получиться с первого раза. С первых нескольких десятков раз. Хорошо-хорошо… Сотен. Главный плюс — это феерически весело и в итоге решение будет найдено! Не сдавайтесь!

Я не призываю вас постоянно пользоваться этим методом. Просто пообещайте мне, что попробуете разок. Вы ничего не потеряете, но многое приобретёте! Пишите мне о своих результатах.

Блок П.П.П.

— представьте, что оно рассказывает вам стих:

— послушайте Кровосток — Куртец
— положите пакет абстракции в корзину

Вот. Теперь всё. Приятных абстракций…

Tagged: абстрагирование, быстрый, Гешка, групповой, одиночный, простой

Что такое метод абстрагирования и в чем его польза?

59

Иногда так нужно понять суть и не обращать внимания на мелочи, но отбросить всё лишнее непросто. Поможет в этом метод абстрагирования.

Что это такое?

Что такое метод абстрагирования? Это мысленное выделение какого-либо предмета в отвлечении от его связей с другими предметами или отношения явления или вещей в отвлечении от их самих, а также выявление одного из свойств в отвлечении ото всех остальных.

Кроме того, такое понятие может означать взгляд на явление, предмет, ситуацию или личность как бы с отстранённой точки восприятия, то есть отвлечение от конкретики и мелочей и общую оценку. Таким образом, абстрагирование позволяет выделить важное и не обращать внимания на детали или же обобщить что-то и не учитывать конкретные отдельные составляющие.

Зачем нужно делать это?

Примеры использования метода абстрагирования встречаются в нашей жизни повсеместно и помогают нам определять цели и достигать их. Например, абстрагироваться можно на работе, когда нужно решить какую-то важную задачу. Выделив всё самое основное, отбросив мелочи и не обращая внимания на раздражители и отвлекающие факторы, можно легко справиться со своими обязанностями.

Также абстрагирование пригодится в учёбе, когда нужно изучить какую-то конкретную тему и не отвлекаться на изученные ранее или понять суть предмета, не учитывая его характеристики.

Метод поможет и при решении повседневных бытовых проблем. Так, если вам нужно вымыть полы и пропылесосить, не стоит отвлекаться на другие дела (стирка, наведение порядка в шкафах), к ним вы вернётесь позже. Сосредоточившись на одной задаче, можно выполнить её эффективно и быстро.

Основные цели

Основными целями абстрагирования являются следующие:

  • Создание образца. Если рассматривается какое-то определённое свойство предмета или его характеристика, то его можно использовать как образец, то есть сделать неким эквивалентом, шаблоном. Конечно, в реальной жизни такого не бывает, но при размышлениях этот пример поможет. Взятая за основу характеристика будет некой отправной точкой, тем, от чего вы будете исходить при рассмотрении других свойств.
  • Отождествление. Оно заключается в том, что конкретные отличительные черты каких-либо предметов не берутся во внимание, а учитываются лишь свойства и характеристики, которые являются общими и связывают рассматриваемые ситуации, явления, вещи и так далее.
  • Конкретика и чёткость. Внимание в данном случае фокусируется на каком-то одном определенном понятии, а все остальные характеристики просто не учитываются. Это позволяет чётко определить границы понятия и отделить его от других, схожих с ним или имеющих какие-то общие черты.
  • Систематизация и обобщение. В таком случае внимание концентрируется на характеристиках и свойствах, которые являются характерными для каких-либо понятий и позволяют их разграничивать и систематизировать. В итоге получаются группы, и каждая из них является независимой и отличается от других, имеющих свои ключевые моменты. Но при этом такая группа включает в себя понятия, обобщенные по каким-то признакам и схожие с характеристиками других выделенных групп.

Как научиться абстрагироваться?

Познание абстрагирования – довольно сложный и весьма продолжительный процесс, требующий усилий. И всё же научиться абстрагироваться можно. Вот что для этого следует делать:

  1. Если вам нужно абстрагироваться в какой-то сложной ситуации, в которой вы задействованы, то попробуйте взглянуть на неё со стороны и представить, что всё это происходит не с вами.
  2. Научитесь не обращать внимания на внешние раздражители.
  3. Научитесь выделять самое важное. Сначала можно делать пометки или записи, затем вы сможете классифицировать изучаемые или рассматриваемые процессы или явления мысленно.
  4. Можно проговаривать про себя то, на чём нужно сконцентрироваться на данный момент.
  5. Можно попробовать связать изучаемый предмет с другим, который хорошо знаком вам и досконально изучен.
  6. На начальных этапах освоения метода абстрагирования можно использовать схемы или таблицы, они помогут систематизировать данные и выделить всё самое значимое.
  7. Ставьте чёткие цели. И иногда не стоит думать о методах их достижения, важно рассматривать конечный желаемый результат и отталкиваться от него.
  8. Конкретизируйте задачи, отделяйте их от других. Так, если вам нужно выучить какую-то тему, то забудьте о других и используйте только нужную информацию.
  9. Помогут научиться абстрагироваться соблюдение режима и дисциплина.
  10. Не пытайтесь делать одновременно несколько дел, выполняйте обязанности последовательно и решайте проблемы по мере их поступления.

Пусть этот метод поможет вам видеть суть вопроса и решать самые сложные задачи.

Абстрактные типы и методы в Swift

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

Например, предположим, что мы хотели унифицировать способ загрузки определенных типов моделей по сети, предоставив общий API, который мы сможем использовать для разделения задач, облегчения внедрения зависимостей и имитации, а также сохраняйте имена методов согласованными во всем нашем проекте.

Один из основанных на абстрактных типах способов сделать это — использовать базовый класс, который будет действовать как общий унифицированный интерфейс для всех наших типов загрузки модели. Поскольку мы не хотим, чтобы этот класс когда-либо использовался напрямую, мы заставим его вызывать fatalError , если его базовая реализация вызывается по ошибке:

 class Loadable {
    функция загрузки (от URL: URL) асинхронные броски -> Модель {
        fatalError("загрузка(из:) не реализована")
    }
} 

Затем каждый подкласс Loadable переопределит указанный выше метод load , чтобы обеспечить функциональность загрузки, например:

 class UserLoader: Loadable {
    переопределить загрузку функции (из URL-адреса: URL) асинхронные броски -> Пользователь {
        ...
    }
} 

Если приведенный выше шаблон выглядит знакомым, то, вероятно, это потому, что это, по сути, тот же тип полиморфизма, для которого мы обычно используем протоколы в Swift.

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

Однако протоколы имеют значительное преимущество перед абстрактными классами, поскольку компилятор обеспечивает правильную реализацию всех их требований, то есть нам больше не нужно полагаться на ошибки времени выполнения (такие как fatalError ) для защиты от ненадлежащего использования, поскольку нет возможности создать протокол отдельно.

Итак, вот как могли бы выглядеть наши прежние типы Loadable и UserLoader , если бы мы пошли по протокольно-ориентированному маршруту, а не использовали абстрактный базовый класс:

 протокол Loadable {
    модель ассоциированного типа
    func load (от url: URL) асинхронные броски ->
Модель } класс UserLoader: загружаемый { функция загрузки (из URL: URL) асинхронные броски -> Пользователь { ... } }

Обратите внимание, что теперь мы используем связанный тип, чтобы позволить каждой реализации Loadable решать, какую именно модель она хочет загрузить — что дает нам хорошее сочетание полной безопасности типов и большой гибкости.

Итак, в целом протоколы определенно являются предпочтительным способом объявления абстрактных типов в Swift, но это не значит, что они идеальны. На самом деле наша реализация Loadable на основе протокола в настоящее время имеет два основных недостатка:

  • Во-первых, поскольку нам пришлось добавить связанный тип в наш протокол, чтобы сохранить нашу установку универсальной и безопасной для типов, это означает, что
    Загружаемый
    больше нельзя ссылаться напрямую.
  • И, во-вторых, поскольку протоколы не могут содержать какую-либо форму хранения, если мы хотим добавить какие-либо сохраненные свойства, которые могли бы использовать все реализации Loadable , нам пришлось бы заново объявлять эти свойства в каждом из эти конкретные реализации.

Этот аспект хранения свойств действительно является огромным преимуществом нашей предыдущей установки на основе абстрактных классов. Таким образом, если бы мы вернули Loadable обратно в класс, то мы смогли бы хранить все объекты, которые потребуются нашим подклассам, прямо в нашем базовом классе, избавляя от необходимости дублировать эти свойства в нескольких типах:

 class Загружаемый<Модель> {
    пусть сеть: Сеть
разрешить кеширование: Cache
    init(сеть: Сеть, кэш: Кэш) {
        self.
networking = сеть self.cache = кеш } функция загрузки (от URL: URL) асинхронные броски -> Модель { fatalError("загрузка(из:) не реализована") } } класс UserLoader: Loadable { переопределить загрузку функции (из URL-адреса: URL) асинхронные броски -> Пользователь { если позволить cachedUser = cache.value(forKey: url) { вернуть cachedUser } let data = попробуйте await networking.data(from: url) ... } }

Итак, здесь мы имеем дело с классическим компромиссным сценарием, где оба подхода (абстрактные классы и протоколы) дают нам разный набор плюсов и минусов. Но что, если бы мы могли объединить их, чтобы получить лучшее из обоих миров?

Если подумать, то единственная реальная проблема с подходом на основе абстрактных классов заключается в том, что fatalError мы должны были добавить в метод, который должен реализовать каждый подкласс, так что, если бы мы использовали протокол

только для этого конкретного метода ? Тогда мы могли бы по-прежнему сохранять наши свойства networking и cache в нашем базовом классе — например:

 протокол LoadableProtocol {
    модель ассоциированного типа
    func load (от url: URL) асинхронные броски -> Модель
}
класс LoadableBase<Модель> {
    пусть сеть: Сеть
разрешить кеширование: Cache
    init(сеть: Сеть, кэш: Кэш) {
        self. networking = сеть
        self.cache = кеш
    }
} 

Основным недостатком этого подхода является то, что все конкретные реализации теперь должны оба подкласса LoadableBase и объявлять, что они соответствуют нашему новому LoadableProtocol :

 class UserLoader: LoadableBase <Пользователь>
, Загружаемый протокол { ... }

Возможно, это не такая уж большая проблема, но, возможно, это делает наш код немного менее элегантным. Хорошая новость заключается в том, что мы действительно можем решить эту проблему, используя универсальный введите псевдоним . Поскольку оператор композиции Swift, и , поддерживает объединение класса с протоколом, мы можем повторно ввести наш тип Loadable как комбинацию между LoadableBase и LoadableProtocol :

 typealias Loadable = LoadableBase< Модель > & LoadableProtocol 

Таким образом, конкретные типы (например, UserLoader ) могут просто объявить, что они основаны на Loadable , и компилятор гарантирует, что все такие типы реализуют наш протокол. 0011 метод загрузки

— при этом позволяя этим типам также использовать свойства, объявленные в нашем базовом классе:

 class UserLoader: Loadable {
    функция загрузки (из URL: URL) асинхронные броски -> Пользователь {
        если позволить cachedUser = cache.value(forKey: url) {
            вернуть cachedUser
        }
        let data = попробуйте await networking.data(from: url)
        ...
    }
} 

Отлично! Единственным реальным недостатком описанного выше подхода является то, что на Loadable по-прежнему нельзя ссылаться напрямую, так как под капотом он по-прежнему частично является универсальным протоколом. Однако на самом деле это может не быть проблемой — и если это когда-нибудь случится, мы всегда сможем использовать такие методы, как стирание типов, чтобы обойти такие проблемы.

Еще одно небольшое предостережение с нашей новой настройкой Loadable на основе псевдонимов типов заключается в том, что такие комбинированные псевдонимы типов не могут быть расширены, что может стать проблемой, если мы хотим предоставить несколько удобных API, которые нам не нужны (или

не может ) реализовать непосредственно в нашем классе LoadableBase .

Однако одним из способов решения этой проблемы было бы объявить все, что необходимо для реализации этих удобных API в нашем протоколе, что затем позволило бы нам расширить этот протокол сам по себе:

 протокол LoadableProtocol {
    модель ассоциированного типа
    переменная сеть: сеть {получить}
var cache: Cache {get}
    func load (от url: URL) асинхронные броски -> Модель
}
расширение LoadableProtocol {
    func loadWithCaching (от url: URL) async throws -> Model {
        если позволить cachedModel = cache.value (forKey: url) {
            вернуть cachedModel
        }
        пусть модель = попробуйте ожидание загрузки (от: url)
        cache.insert(модель, forKey: URL)
        модель возврата
    }
} 

Вот несколько разных способов использования абстрактных типов и методов в Swift. Подклассы, возможно, в настоящее время не так популярны, как когда-то (и остаются в других языках программирования), но я по-прежнему думаю, что такие методы здорово иметь в нашем общем наборе инструментов разработки Swift.

Если у вас есть какие-либо вопросы, комментарии или отзывы, не стесняйтесь обращаться через Twitter или по электронной почте.

Спасибо за внимание!

Пересмотр исходной абстракции, метод числа кривых стока, гидрология поверхностных вод, Виктор М. Понсе и Луис Магаллон

Концепция начальной абстракции развивалась с момента ее введения в 1950-х годах как часть второго тура NRCS. метод числа кривых (Ponce, 2014). В настоящее время используется несколько интерпретаций, которые не поддаются стандартизации. В гидрологических моделях, таких как SWMM и HEC-HMS, применяется концепция по-разному, что приводит к разным ответам. Таким образом, стало необходимо пересмотреть и уточнить понятие начальной абстракции в методе числа кривых стока, в надежде, что в будущем когда метод используется в сочетании с SWMM и HEC-HMS, рассчитанный гидрограф будет практически таким же.


2. ОПРЕДЕЛЕНИЕ НАЧАЛЬНОЙ АБСТРАКЦИИ

Концепция первоначальной абстракции возникла с помощью метода номера кривой стока (RCN) NRCS, разработанного Службой охраны природных ресурсов Министерства сельского хозяйства США (бывшая Служба охраны почв или SCS) в 1950-х годах и задокументирована в Национальный инженерный справочник: Часть 630 — Гидрология. Для данной глубины шторма P и номера кривой стока CN , исходная абстракция I a является начальной дробью глубина шторма, после которого начинается сток.

Виктор Мокус, ведущий разработчик метода RCN, считал, что для любого случая количество первоначальная абстракция была для всех практических целей неразрешимой. Чтобы обойти эту проблему, Мокус предложил построить P’ = P I a , вместо P , по оси абсцисс, сток Q по ординатам (Ponce, 1996). Прошла эта процедура была бы принята, она фактически разделила бы оценка начальной абстракции от метода RCN.

Как сказал Мокус Понсе в ныне известном интервью (Понсе, 1996), его отвергло начальство в SCS, которое считало, что первоначальный компонент абстракции должен был быть частью зарождающегося метода RCN. Для полноты исходное числовое уравнение кривой стока, разработанное Mockus, выглядит следующим образом:

P Q              Q
_______  =  ______
     S                 P

(1)

в котором S = потенциальное хранилище, все переменные взяты в единицах глубины.

Исходная абстракция I a было вычтено из глубины шторма P , чтобы получить:

P I a Q                Q
___________  =  _________
        S                   P I a

(2)

Чтобы метод был простым, Mockus выразил потенциальное удержание S с точки зрения более управляемого кривая стока номер CN :

1000
S = _________  —  10
            CN

(3)

в котором CN представляет собой безразмерное число, ограниченное диапазоном 1 ≤ CN ≤ 100, а все остальные члены уравнения 3 — глубина в дюймах.

Чтобы метод оставался практичным, только с одним параметром ( CN ), исходная абстракция должна была быть связанные с хранилищем S . После долгих обсуждений было принято следующее линейное соотношение:

я а = λ S

(4)

в котором λ = начальный параметр абстракции.

В начале метода значение λ был зафиксирован на уровне λ = 0,2, т.к. это значение оказалось в центре данных. На сегодняшний день остаются вопросы о том, это значение применимо для всех случаев или, более того, применимо ли оно ко всем как центральным и только ценить. За последние 20 лет было проведено много исследований по этому вопросу. Хокинс и др. (2002) убедительно высказались за использование λ = 0,05.

В настоящее время (2020 г. ) NRCS не приняла решения о сохранении или изменении значение λ . Поскольку текущий набор CN был разработан совместно с λ = 0,2, легко видеть, что официальный изменение λ потребовало бы нового CN набор.

За время, прошедшее с момента его первоначального развития, метод числа кривых стока NRCS стал стандартом де-факто . в гидрологической инженерной практике с многочисленными приложениями в США. и других странах (Ponce and Hawkins, 1996). Его популярность основана на его простоте, хотя необходима разумная осторожность. для правильного использования метода. Во многих случаях возможности метода были расширены, во многом из-за отсутствия альтернативы.

Мокус указал, что метод не предназначен для прогнозирования 90–150 скорости инфильтрации 90–151, а скорее из 90 150 общего объема инфильтрации 90 151 для данного штормового явления (Ponce, 1996). Учитывая P (в дюймах) и оценку CN , объем стока Q (в дюймах) равен (Понсе, 2014 г. ):

[ CN ( P + 2 ) — 200 ] 2
Q =    ___________________________
             CN [ CN ( P — 8 ) + 800 ]

(5)

Как первоначально было предложено, метод NRCS RCN эффективно сосредоточен во времени, давая оценку ливневого стока Q (в), учитывая ливневые осадки P (в) и соответствующее значение CN , независимо от продолжительности шторма, что явно не учитывается. Мокус заявил, что вспомогательные данные, использованные при разработке метода было ежедневных осадков, , потому что этот тип данных был единственным доступным в больших количествах. (Понсе, 1996). На практике это означает, что метод RCN должен работать лучше всего, когда продолжительность шторма близка к одному (1) дню, хотя во многих приложениях это не обязательно случай (NRCS, 1986).

Корректное определение начальной абстракции в методе NRCS RCN следует из оригинальное развитие метода:

«Для заданной глубины шторма P и номер кривой стока CN , исходная абстракция I a представляет собой долю глубины шторма после какой сток начинается.»

Обратите внимание, что в методе RCN начальная абстракция служит общепризнанной цели. снижения стока Q ниже значение, которое было бы применимо, если бы начальная абстракция была нулевой. Акцент делается на влиянии начального водозабора на снижение общего стока Q (ордината), а не при применении первоначальной абстракции к осадкам (абсцисса).


3. АНАЛИЗ

Согласно методу RCN, сток Q является функцией глубины шторма P и номер кривой CN вне зависимости от продолжительности шторма. Следовательно, для заданного номера кривой CN , хранилище S и начальная абстракция I a являются константами. Как P , S и Q , начальная абстракция I a представляет собой объем, интерпретируемый как дробь глубины шторма, равномерно распределенной для данной продолжительности шторма и рассматриваемого водосбора.

Здесь утверждается, что если CN и S не учитывают ни скорость инфильтрации, ни продолжительность шторма, также не должна исходная абстракция I a . Исходя из этого, кажется необоснованным размещать начальную абстракцию в начале бури. Заметим, что метод RCN сосредоточен во времени, изначально разрабатывался для продолжительность шторма составляет 24 часа, а затем продлевается на практике к бурям меньшей продолжительности.

Дано t r = продолжительность шторма, t c = время концентрации и P e = эффективное осаждение, распределение общей абстракции ( P Q ) (т. е. общих потерь) равномерно во времени производит постоянную эффективную интенсивность осадков ( I и = P e / t r ). Для т р т с , эта процедура приводит к концентрации стока с пиковым расходом Q p 1 (Понсе, 2014 г.):

Q p 1  =  I e A

(6)

И наоборот, если первоначальная абстракция учитывается в начале шторма, полная абстракция ( P Q ) распределяется во времени неравномерно. Таким образом, для сохранения массы на протяжении всей бури концентрация стока должна достигаться при пиковом расходе Q p 2 , где:

9020 4

с существенными различиями между этими двумя подходами.

На рис. 1 показан типичный пример разницы пиковых потоков (Magallon and Ponce, 2015). Модель управления (Online_Overland) распространяет общую абстракцию равномерно во времени, в то время как SWMM и HEC-HMS этого не делают.

Остается вопрос о какой из подходов к отводу осадков с использованием метод числа кривых стока является более реалистичным или более подходящим. Это приводит к значительным различиям в свойствах гидрографа. (Магаллон и Понсе, 2015 г.).

Q p 2  >  Q p 1

(7)

Рис. 1. Сравнение гидрографов для трех моделей стока суши с использованием
номера кривой стока NRCS. как метод абстракции.


4. ВЫВОДЫ

Пересматривается концепция исходной абстракции в методе числа кривых стока NRCS. в свете явно отличающихся результатов полученные гидрологическими моделями, используемыми в настоящее время (SWMM и HEC-HMS). Метод числа кривых стока сосредоточен во времени, но он используется на практике. как временно распределенная модель, выходящая за рамки ее первоначального развития. Это привело к различным способам учета исходной абстракции. Необходимо срочно разработать новый стандарт, так что различные модели приведут к одинаковым или подобным результатам.


ССЫЛКИ

Хокинс, Р. Х., Р. Цзян, Д. Э. Вудворд, А. Т. Хьельмфельт и Дж. Э. Ван Маллен, 2002 г. Кривая стока числовой метод: изучение начального коэффициента абстракции. Материалы Второй федеральной межведомственной Конференция по гидрологическому моделированию, Лас-Вегас, Невада.

Магаллон Л. и В. М. Понсе. 2015. Сравнение моделей наземного стока. Интернет-публикация.

Ponce, VM 1996. Заметки о моем разговоре с Виком Мокусом. Онлайн функция.

Ponce, VM 2014. Инженерная гидрология, принципы и практика. Интернет-издание.

Понсе, В. М. и Р. Х. Хокинс. 1996.

About the Author

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Related Posts