14 полиморфизм и его использование в программах. Концепции объектно-ориентированного программирования JAVA

s_a_p 20 августа 2008 в 19:09

Полиморфизм для начинающих

  • PHP

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

Постановка задачи

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

Самые простые варианты, которые приходят в голову — написать три отдельных класса и работать с ними. Или написать один класс, в которым будут все свойства, присущие всем трем типам публикаций, а задействоваться будут только нужные. Но ведь для разных типов аналогичные по логике методы должны работать по-разному. Делать несколько однотипных методов для разных типов (get_news, get_announcements, get_articles) — это уже совсем неграмотно. Тут нам и поможет полиморфизм.

Абстрактный класс

Грубо говоря, это класс-шаблон. Он реализует функциональность только на том уровне, на котором она известна на данный момент. Производные же классы ее дополняют. Но, пора перейти от теории к практике. Сразу оговорюсь, рассматривается примитивный пример с минимальной функциональностью. Все объяснения — в комментариях в коде.

abstract class Publication
{
// таблица, в которой хранятся данные по элементу
protected $table ;

// свойства элемента нам неизвестны
protected $properties = array();

// конструктор

{
// обратите внимание, мы не знаем, из какой таблицы нам нужно получить данные
$result = mysql_query ("SELECT * FROM `" . $this -> table . "` WHERE `id`="" . $id . "" LIMIT 1" );
// какие мы получили данные, мы тоже не знаем
$this -> properties = mysql_fetch_assoc ($result );
}

// метод, одинаковый для любого типа публикаций, возвращает значение свойства
public function get_property ($name )
{
if (isset($this -> properties [ $name ]))
return $this -> properties [ $name ];

Return false ;
}

// метод, одинаковый для любого типа публикаций, устанавливает значение свойства
public function set_property ($name , $value )
{
if (!isset($this -> properties [ $name ]))
return false ;

$this -> properties [ $name ] = $value ;

Return $value ;
}

// а этот метод должен напечатать публикацию, но мы не знаем, как именно это сделать, и потому объявляем его абстрактным
abstract public function do_print ();
}

Производные классы

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

class News extends Publication
{
// конструктор класса новостей, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по новостям
$this -> table = "news_table" ;
parent :: __construct ($id );
}

Public function do_print ()
{
echo $this -> properties [ "title" ];
echo "

" ;
echo $this -> properties [ "text" ];
echo "
Источник: " . $this -> properties [ "source" ];
}
}

Class Announcement extends Publication
{
// конструктор класса объявлений, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по объявлениям
$this -> table = "announcements_table" ;
// вызываем конструктор родительского класса
parent :: __construct ($id );
}

// переопределяем абстрактный метод печати
public function do_print ()
{
echo $this -> properties [ "title" ];
echo "
Внимание! Объявление действительно до "
. $this -> properties [ "end_date" ];
echo "

" . $this -> properties [ "text" ];
}
}

Class Article extends Publication
{
// конструктор класса статей, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по статьям
$this -> table = "articles_table" ;
// вызываем конструктор родительского класса
parent :: __construct ($id );
}

// переопределяем абстрактный метод печати
public function do_print ()
{
echo $this -> properties [ "title" ];
echo "

" ;
echo $this -> properties [ "text" ];
echo "
" . $this -> properties [ "author" ];
}
}

Теперь об использовании

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

// наполняем массив публикаций объектами, производными от Publication
$publications = new News ($news_id );
$publications = new Announcement ($announcement_id );
$publications = new Article ($article_id );

Foreach ($publications as $publication ) {
// если мы работаем с наследниками Publication
if ($publication instanceof Publication ) {
// то печатаем данные
$publication -> do_print ();
} else {
// исключение или обработка ошибки
}
}

Вот и все. Легким движением руки брюки превращаются в элегантные шорты:-).

Основная выгода полиморфизма — легкость, с которой можно создавать новые классы, «ведущие себя» аналогично родственным, что, в свою очередь, позволяет достигнуть расширяемости и модифицируемости. В статье показан всего лишь примитивный пример, но даже в нем видно, насколько использование абстракций может облегчить разработку. Мы можем работать с новостями точно так, как с объявлениями или статьями, при этом нам даже не обязательно знать, с чем именно мы работаем! В реальных, намного более сложных приложениях, эта выгода еще ощутимей.

Немного теории

  • Методы, которые требуют переопределения, называются абстрактными. Логично, что если класс содержит хотя бы один абстрактный метод, то он тоже является абстрактным.
  • Очевидно, что обьект абстрактного класса невозможно создать, иначе он не был бы абстрактным.
  • Производный класс имеет свойства и методы, принадлежащие базовому классу, и, кроме того, может иметь собственные методы и свойства.
  • Метод, переопределяемый в производном классе, называется виртуальным. В базовом абстрактном классе об этом методе нет никакой информации.
  • Суть абстрагирования в том, чтобы определять метод в том месте, где есть наиболее полная информация о том, как он должен работать.
UPD: по поводу sql-inj и нарушения MVC — господа, это просто пример, причем пример по полиморфизму, в котором я не считаю нужным уделять значения этим вещам. Это тема для совсем других статей.

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

Постановка задачи

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

Самые простые варианты, которые приходят в голову — написать три отдельных класса и работать с ними. Или написать один класс, в которым будут все свойства, присущие всем трем типам публикаций, а задействоваться будут только нужные. Но ведь для разных типов аналогичные по логике методы должны работать по-разному. Делать несколько однотипных методов для разных типов (get_news, get_announcements, get_articles) — это уже совсем неграмотно. Тут нам и поможет полиморфизм.

Абстрактный класс

Грубо говоря, это класс-шаблон. Он реализует функциональность только на том уровне, на котором она известна на данный момент. Производные же классы ее дополняют. Но, пора перейти от теории к практике. Сразу оговорюсь, рассматривается примитивный пример с минимальной функциональностью. Все объяснения — в комментариях в коде.

abstract class Publication
{
// таблица, в которой хранятся данные по элементу
protected $table ;

// свойства элемента нам неизвестны
protected $properties = array();

// конструктор

{
// обратите внимание, мы не знаем, из какой таблицы нам нужно получить данные
$result = mysql_query ("SELECT * FROM `" . $this -> table . "` WHERE `id`="" . $id . "" LIMIT 1" );
// какие мы получили данные, мы тоже не знаем
$this -> properties = mysql_fetch_assoc ($result );
}

// метод, одинаковый для любого типа публикаций, возвращает значение свойства
public function get_property ($name )
{
if (isset($this -> properties [ $name ]))
return $this -> properties [ $name ];

Return false ;
}

// метод, одинаковый для любого типа публикаций, устанавливает значение свойства
public function set_property ($name , $value )
{
if (!isset($this -> properties [ $name ]))
return false ;

$this -> properties [ $name ] = $value ;

Return $value ;
}

// а этот метод должен напечатать публикацию, но мы не знаем, как именно это сделать, и потому объявляем его абстрактным
abstract public function do_print ();
}

Производные классы

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

class News extends Publication
{
// конструктор класса новостей, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по новостям
$this -> table = "news_table" ;
parent :: __construct ($id );
}

Public function do_print ()
{
echo $this -> properties [ "title" ];
echo "

" ;
echo $this -> properties [ "text" ];
echo "
Источник: " . $this -> properties [ "source" ];
}
}

Class Announcement extends Publication
{
// конструктор класса объявлений, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по объявлениям
$this -> table = "announcements_table" ;
// вызываем конструктор родительского класса
parent :: __construct ($id );
}

// переопределяем абстрактный метод печати
public function do_print ()
{
echo $this -> properties [ "title" ];
echo "
Внимание! Объявление действительно до "
. $this -> properties [ "end_date" ];
echo "

" . $this -> properties [ "text" ];
}
}

Class Article extends Publication
{
// конструктор класса статей, производного от класса публикаций
public function __construct ($id )
{
// устанавливаем значение таблицы, в которой хранятся данные по статьям
$this -> table = "articles_table" ;
// вызываем конструктор родительского класса
parent :: __construct ($id );
}

// переопределяем абстрактный метод печати
public function do_print ()
{
echo $this -> properties [ "title" ];
echo "

" ;
echo $this -> properties [ "text" ];
echo "
" . $this -> properties [ "author" ];
}
}

Теперь об использовании

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

// наполняем массив публикаций объектами, производными от Publication
$publications = new News ($news_id );
$publications = new Announcement ($announcement_id );
$publications = new Article ($article_id );

Foreach ($publications as $publication ) {
// если мы работаем с наследниками Publication
if ($publication instanceof Publication ) {
// то печатаем данные
$publication -> do_print ();
} else {
// исключение или обработка ошибки
}
}

Вот и все. Легким движением руки брюки превращаются в элегантные шорты:-).

Основная выгода полиморфизма — легкость, с которой можно создавать новые классы, «ведущие себя» аналогично родственным, что, в свою очередь, позволяет достигнуть расширяемости и модифицируемости. В статье показан всего лишь примитивный пример, но даже в нем видно, насколько использование абстракций может облегчить разработку. Мы можем работать с новостями точно так, как с объявлениями или статьями, при этом нам даже не обязательно знать, с чем именно мы работаем! В реальных, намного более сложных приложениях, эта выгода еще ощутимей.

Немного теории

  • Методы, которые требуют переопределения, называются абстрактными. Логично, что если класс содержит хотя бы один абстрактный метод, то он тоже является абстрактным.
  • Очевидно, что обьект абстрактного класса невозможно создать, иначе он не был бы абстрактным.
  • Производный класс имеет свойства и методы, принадлежащие базовому классу, и, кроме того, может иметь собственные методы и свойства.
  • Метод, переопределяемый в производном классе, называется виртуальным. В базовом абстрактном классе об этом методе нет никакой информации.
  • Суть абстрагирования в том, чтобы определять метод в том месте, где есть наиболее полная информация о том, как он должен работать.
UPD: по поводу sql-inj и нарушения MVC — господа, это просто пример, причем пример по полиморфизму, в котором я не считаю нужным уделять значения этим вещам. Это тема для совсем других статей.

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

Большой запас

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

Как все начиналось?

Генетика стала бурно развиваться в 60-е годы прошлого столетия, именно тогда стал применяться или ферментов в геле, который позволил определить генетический полиморфизм. Что это за метод? Именно при помощи него вызывается перемещение белков в электрическом поле, которое зависит от размера перемещаемого белка, его конфигурации, а также суммарного заряда в разных участках геля. После этого, в зависимости от расположения и числа пятен, которые появились, проводится идентификация определившегося вещества. Чтобы оценить полиморфизм белка в популяции, стоит исследовать приблизительно 20 или большее количество локусов. Затем с использованием математического метода определяется количество а также соотношение гомо- и гетерозигот. По данным исследований, одни гены могут быть мономорфными, а другие - необычайно полиморфными.

Виды полиморфизма

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

Генный и хромосомный полиморфизм

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

Переходный полиморфизм

Переходный полиморфизм возникает в том случае, когда в популяции происходит замещение аллеля, который когда-то был обычным, другим, который обеспечивает своего носителя большей приспосабливаемостью (это также называется множественным аллелизмом). При данной разновидности есть направленный сдвиг в процентном содержании генотипов, за счет него происходит эволюция, и осуществляется ее динамика. Явление индустриального механизма может стать хорошим примером, который охарактеризует переходный полиморфизм. Что это такое, показывает простая бабочка, которая с развитием промышленности сменила белый цвет своих крыльев на темный. Данное явление начали наблюдать в Англии, где более чем 80 видов бабочек из бледно-кремовых цветов стали темными, что впервые подметили после 1848 года в Манчестере в связи с бурным развитием промышленности. Уже в 1895 году более 95% пядениц приобрели темную окраску крыльев. Связаны такие перемены с тем, что стволы деревьев стали более закопченными, и светлые бабочки стали легкой добычей дроздов и малиновок. Перемены произошли за счет мутантных меланистических аллелей.

Сбалансированный полиморфизм

Определение "полиморфизм сбалансированный" характеризует отсутствие сдвига любых числовых соотношений различных форм генотипов в популяции, которая находится в стабильных условиях среды обитания. Это означает, что из поколения в поколение соотношение остается одним и тем же, но может незначительно колебаться в пределах той или иной величины, которая является постоянной. В сравнении с переходным, сбалансированный полиморфизм - что это? Он в первую очередь является статикой эволюционного процесса. И. И. Шмальгаузен в 1940 году дал ему также название равновесного гетероморфизма.

Пример сбалансированного полиморфизма

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

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

Генетическое равновесие

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

Большинство случаев показывают, что ценность таких генов менее единицы, а в случае неспособности таких мутантов к размножению и вовсе все сводится к 0. Мутации такого рода отметаются в процессе естественного отбора, но это не исключает неоднократное изменение одного и того же гена, что компенсирует элиминацию, которая осуществляется отбором. Тогда достигается равновесие, мутировавшие гены могут появляться или, наоборот, исчезать. Это приводит к сбалансированности процесса.

Пример, который может ярко охарактеризовать происходящее, - серповидноклеточная анемия. В данном случае доминантный мутировавший ген в гомозиготном состоянии способствует ранней гибели организма. Гетерозиготные организмы выживают, но они более восприимчивы к заболеванию малярией. Сбалансированный полиморфизм гена серповидноклеточной анемии можно проследить в местах распространения данного тропического заболевания. В такой популяции гомозиготы (особи с одинаковыми генами) элиминируются, наравне с этим действует отбор в пользу гетерозигот (особей с разными генами). За счет происходящего разновекторного отбора в генофонде популяции происходит поддержание в каждом поколении генотипов, которые обеспечивают лучшую приспосабливаемость организма к условиям среды обитания. Наравне с наличием гена серповидноклеточной анемии в есть и другие разновидности генов, характеризующие полиморфизм. Что это дает? Ответом на этот вопрос станет такое явление, как гетерозис.

Гетерозиготные мутации и полиморфизм

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

эволюционного процесса

Эволюционный процесс является непрерывным, и обязательным его условием есть полиморфизм. Что это - показывает постоянная приспосабливаемость той или иной популяции к среде своего обитания. Разнополые организмы, которые обитают в пределах одной группы, могут быть в гетерозиготном состоянии и передаваться из поколения в поколение на протяжении многих лет. Наравне с этим фенотипического проявления их может и не быть - за счет огромного запаса генетической изменчивости.

Ген фибриногена

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

Привет! Это статья об одном из принципов ООП - полиморфизм.

Что такое полиморфизм

Определение полиморфизма звучит устрашающе 🙂

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

Слово "полиморфизм " может показаться сложным - но это не так. Нужно просто разбить данное определение на части и показать на примерах, что имеется в виду. Поверьте, уже в конце статьи данное определение полиморфизма покажется Вам понятным 🙂

Полиморфизм , если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".

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

Так о каких формах идет речь? Давайте сначала приведем примеры и покажем, как на практике проявляется полиморфизм, а потом снова вернемся к его определению.

Как проявляется полиморфизм

Дело в том, что если бы в Java не было принципа полиморфизма , компилятор бы интерпретировал это как ошибку:

Как видите, методы на картинке отличаются значениями, которые они принимают:

  • первый принимает int
  • а второй принимает String

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

Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt() ), чем по одному отдельному названию на этот же метод, написанный для каждого типа:

Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать! Очень удобно.

Теперь Вы можете понять, почему часто этот принцип описывают фразой:

Один интерфейс - много методов

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

Перегрузка методов

То, что мы показывали выше - несколько методов с одним названием и разными параметрами - называется перегрузкой . Но это был пример перегрузки метода в одном классе . Но бывает еще один случай - переопределение методов родительского класса.

Переопределение методов родителя

Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его. Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет "мертвым грузом" лежать в нашем классе.

Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.

Пример

Представим, что у нас есть такая структура:

Вверху иерархии классов стоит класс Animal . Его наследуют три класса - Cat , Dog и Cow .

У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос". Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, Вам нужно задать другой метод для классов Cat , Dog и Cow - чтобы кошка мяукала, собака гавкала, а корова говорила "Муу".

Поэтому, в классах-наследниках мы переопределяем метод voice() , чтобы мы в консоли получали "Мяу", "Гав" и "Муу".

  • Обратите внимание: перед методом, который мы переопределяем, пишем "@Override ". Это дает понять компилятору, что мы хотим переопределить метод.

Так что же такое полиморфизм

Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые мы приведодили выше - это только способы реализации полиморфизма.

Давайте снова посмотрим на определение, которое мы давали в начале статьи:

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

Выглядит понятнее, правда? Мы показали, как можно:

  • создавать "одноименные методы" в одном классе ("перегрузка методов")
  • или изменить поведение методов родительского класса ("переопределение методов").

Все это - проявления "повышенной гибкости" объектно-ориентированных языков благодаря полиморфизму.

Надеемся, наша статья была Вам полезна. Записаться на наши курсы по Java можно у нас на .

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

Явление полиморфизма впервые было открыто немецким химиком и минерологом Э.Митчерлихом в 1821г. Полиморфизм широко распространен в природе и является одним из характерных свойств кристаллических веществ. Полиморфные модификации, отличаясь внутренней структурой, имеют в связи с этим и различные свойства. Поэтому изучение полиморфизма чрезвычайно важно для практики.

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

В различных полиморфных модификациях существуют углерод, кремний, фосфор, железо и другие элементы. Физические свойства различных модификаций одного и того же вещества могут значительно отличаться. Например модификации углерода, кристаллизующиеся в виде алмаза (кубическая сингония) или в виде графита (гексагональная сингония), резко отличаются друг от друга по физическим свойствам, несмотря на идентичность состава. Если полиморфное превращение сопровождается незначительными изменениями структуры, физические свойства вещества изменяются несущественно. Полиморфных модификаций у каждого конкретного вещества должна быть две, три и более. Различные модификации принято обозначать греческими буквами α, β, γ и т.д., причем первые буквы, как правило, относятся к модификациям, устойчивым при более высоких температурах.

При превращении высокотемпературной модификации в более низкотемпературную обычно первоначальная внешняя форма кристаллов сохраняется, в то время как внутренняя структура вещества претерпевает изменения. Такое сохранение внешней формы, не отвечающей вновь образованной структуре кристаллической решетки, получило название параморфозы. В природе известны параморфозы β -кварца (тригональная симметрия) по α -кварца (гексагональная симметрия), кальцита СаСО 3 (тригональная симметрия) по арагониту (ромбическая симметрия) и др.

Независимо от характера структурных изменений, происходящих при полиморфных превращениях, различают две их разновидности˸ энантиотропные (обратимые) и монотропные (необратимые) превращения.

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

α ↔ β↔жидкость

т.е. перход α → β энантиотропен. Примерами энантиотропных полиморфных превращений являются превращения между полиморфными формами SiO 2 ˸

Полиморфизм - понятие и виды. Классификация и особенности категории "Полиморфизм" 2015, 2017-2018.

  • - Полиморфизм индивидов

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


  • - Дизруптивный благоприятствует сохранению крайних типов и элиминации промежуточных. Приводит к сохранению и усилению полиморфизма.

  • - Внутривидовая дифференцировка человечества. Расы как выражение генетического полиморфизма человечества. Видовое единство человечества.

    ВНУТРИВИДОВАЯ ДИФФЕРЕНЦИАЦИЯ ЧЕЛОВЕЧЕСТВА: С момента возникновения Н. sapiens социальное в человеке стало его сущностью и биологическая эволюция видоизменялась, проявляясь в возникновении широкого генетического полиморфизма. Генетическое разнообразие на уровне... .