<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Генеральский чай</title>
	
	<link>http://generaltea.ru</link>
	<description>как "чайнику" до "генерала" доКОДироваться</description>
	<lastBuildDate>Mon, 10 Oct 2011 12:27:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/generaltea" /><feedburner:info uri="generaltea" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>generaltea</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/generaltea" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fgeneraltea" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Инкапсуляция, Наследование, Полиморфизм</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/t-D8KHcJhbk/</link>
		<comments>http://generaltea.ru/inkapsulyaciya-nasledovanie-polimorfizm/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 12:58:59 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[ООП]]></category>
		<category><![CDATA[основы программирования]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=632</guid>
		<description><![CDATA[После краткого описания основ ООП в предыдущем моем посте, необходимо рассмотреть три основных столпа ООП: инкапсуляцию, наследование и полиморфизм более подробно. Без знания этих понятий, невозможно изучить полноценно ни один из объектно-ориентированных языков программирования. Эти столпы программирования довольно тесно взаимосвязаны между собой, но я все же попробую объяснить их по отдельности. Надеюсь что это будет [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Finkapsulyaciya-nasledovanie-polimorfizm%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Finkapsulyaciya-nasledovanie-polimorfizm%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p align="justify">После краткого описания <a href='http://generaltea.ru/osnovy-oop/'>основ ООП</a> в предыдущем моем посте, необходимо рассмотреть три основных столпа ООП: <strong>инкапсуляцию</strong>, <strong>наследование</strong> и <strong>полиморфизм </strong>более подробно. Без знания этих понятий, невозможно изучить полноценно ни один из объектно-ориентированных языков программирования.</p>
<p align="justify">Эти столпы программирования довольно тесно взаимосвязаны между собой, но я все же попробую объяснить их по отдельности. Надеюсь что это будет не очень сумбурно, и не собьет с толку новичков, а наоборот поможет им более быстро освоится в мире объектно-ориентированного программирования. Поясняющего текста в данном посте будет не так уж и много, потому что основную часть я вынес в комментарии к коду.</p>
<span id="more-632"></span><br />
<h3 align="justify">Инкапсуляция.</h3>
<p align="justify"><strong>Инкапсуляция</strong> – возможность скрытия реализации каких либо частей модуля или объекта от внешнего мира (от клиента). Это означает, что манипулируя модификаторами доступа, можно скрыть или открыть только определенные свойства, методы или классы для того, чтобы ненужные для класса-клиента данные не были доступны.</p>
<p align="justify">Приведу пример инкапсуляции свойств на примере класса автомобиль:</p>
<p><strong><em>Auto.cs:</em></strong></p>
<pre class="brush: csharp">using System;

namespace OOPLibrary.Auto
{
	/// &lt;summary&gt;
	/// Класс описывающий свойства автомобиля и его действия
	/// &lt;/summary&gt;
	public class Auto
	{
		/// &lt;summary&gt;
		/// Хранит возраст автомобиля. Так как возраст нельзя менять из клиента,
		/// то это свойство объявлено с модификатором private.
		/// &lt;/summary&gt;
		private int _age;

		/// &lt;summary&gt;
		/// Хранит признак стоит автомобиль или едет. Свойство используется только внутри класса Auto
		/// и не должно быть доступно в клиентах, потому оно так же объявлено с модификатором private.
		/// &lt;/summary&gt;
		private bool _isMoving;

		/// &lt;summary&gt;
		/// Хранит цвет автомобиля. Его можно менять из клиентских классов,
		/// поэтому свойство объявлено с модификатором public.
		/// &lt;/summary&gt;
		public string Color;

		/// &lt;summary&gt;
		/// Хранит имя автомобиля, допустим, что его тоже можно менять,
		/// поэтому тоже объявляем с модификатором public.
		/// &lt;/summary&gt;
		public string Name;

		/// &lt;summary&gt;
		/// Конструктор класса. Тут задаются начальные свойства автомобиля.
		/// &lt;/summary&gt;
		public Auto()
		{
			_age = 5;
			_isMoving = false;
			Color = &quot;Красный&quot;;
			Name = &quot;Мой автомобиль&quot;;
		}

		/// &lt;summary&gt;
		/// С помощью этого метода можно получить возраст автомобиля,
		/// так как свойство _age недоступно из клиентов.
		/// &lt;/summary&gt;
		/// &lt;returns&gt;Возвращает возраст автомобиля.&lt;/returns&gt;
		public string GetAge()
		{
			return &quot;Этому автомобилю &quot; + _age + &quot; лет.&quot;;
		}

		/// &lt;summary&gt;
		/// Метод стартует автомобиль, если он еще не стартовал.
		/// &lt;/summary&gt;
		public void Start()
		{
			if (_isMoving)
			{
				Console.WriteLine(&quot;Да и так уже едем.&quot;);
			}
			else
			{
				_isMoving = true;
				Console.WriteLine(&quot;Поехали...&quot;);
			}
		}

		/// &lt;summary&gt;
		/// Метод останавливает автомобиль, если он ехал.
		/// &lt;/summary&gt;
		public void Stop()
		{
			if (_isMoving)
			{
				_isMoving = false;
				Console.WriteLine(&quot;Остановились.&quot;);
			}
			else
			{
				Console.WriteLine(&quot;И так уже стоим, куда же дальше?&quot;);
			}
		}

		/// &lt;summary&gt;
		/// Если автомобиль едет, то поворачиваем налево.
		/// &lt;/summary&gt;
		public void MoveLeft()
		{
			if (_isMoving)
			{
				Console.WriteLine(&quot;Поворнули налево.&quot;);
			}
			else
			{
				Console.WriteLine(&quot;Да куда же поворачивать, мы же стоим.&quot;);
			}
		}
		/// &lt;summary&gt;
		/// Если автомобиль едет, то поворачиваем направо.
		/// &lt;/summary&gt;
		public void MoveRight()
		{
			if (_isMoving)
			{
				Console.WriteLine(&quot;Поворнули направо.&quot;);
			}
			else
			{
				Console.WriteLine(&quot;Да куда же поворачивать, мы же стоим.&quot;);
			}
		}
	}
}</pre>
<p align="justify">Данный класс, описывает автомобиль, его свойства и методы, причем некоторые свойства (<span class="code">_age</span> и <span class="code">_isMoving</span>) прячет от клиентов данного класса. Это и есть инкапсуляция, то есть данные свойства доступны внутри класса любым его методам и другим свойствам, но не видимы за его пределами, так как клиенты не должны их менять или получать их значения напрямую.</p>
<p><strong><em>AutoManager.cs:</em></strong></p>
<pre class="brush: csharp">using System;

namespace OOPLibrary.Auto
{
	/// &lt;summary&gt;
	/// Класс управления автомобилем.
	/// &lt;/summary&gt;
	public class AutoManager
	{
		/// &lt;summary&gt;
		/// Менеджер создает объект автомобиля и не дает доступа к нему из других классов,
		/// объявив его при помощи модификатора private.
		/// &lt;/summary&gt;
		private Auto _myAuto;

		/// &lt;summary&gt;
		/// Конструктор менеджера автомобилей.
		/// &lt;/summary&gt;
		public AutoManager()
		{
			// Создаем новый автомобиль
			_myAuto = new Auto();
		}

		/// &lt;summary&gt;
		/// Метод запускает проверку методов и свойств автомобиля.
		/// &lt;/summary&gt;
		public void Run()
		{
			// Выводим имя автомобиля, которое было назначено по умолчанию в конструкторе класса Auto
			Console.WriteLine(&quot;Имя автомобиля: &quot; + _myAuto.Name);
			// Выводим цвет автомобиля, которsq был назначен по умолчанию в конструкторе класса Auto
			Console.WriteLine(&quot;Цвет автомобиля: &quot; + _myAuto.Color);
			// Выводим возраст автомобиля, который был назначен по умолчанию в конструкторе класса Auto
			Console.WriteLine(_myAuto.GetAge());

			// Если попытаться добраться до свойства _age напрямую, то мы получим ошибку компилятора,
			// так как оно объявлено с модификатором private в классе Auto
			//Console.WriteLine(_myAuto._age);&#160;&#160; // Ошибка компилятора
			Console.WriteLine();

			// Меняем имя на новое
			_myAuto.Name = &quot;Новое имя&quot;;
			// Меняем цвет автомобиля
			_myAuto.Color = &quot;Синий&quot;;

			// Поменять возраст автомобиля не получится, так как он доступен только внутри класса Auto
			//_myAuto._age = 6;&#160;&#160; // Ошибка компилятора

			// Выводим новое имя автомобиля
			Console.WriteLine(&quot;Новое имя автомобиля: &quot; + _myAuto.Name);
			// Выводим новый цвет автомобиля
			Console.WriteLine(&quot;Новый цвет автомобиля: &quot; + _myAuto.Color);
			Console.WriteLine();

			// Поворачиваем налево
			Console.Write(&quot;Попытаемся повернуть налево: &quot;);
			_myAuto.MoveLeft();

			// Стартуем автомобиль
			Console.Write(&quot;Вспомнили, что автомобиль не заведен, и стартуем его: &quot;);
			_myAuto.Start();

			// Поворачиваем налево
			Console.Write(&quot;Поворачиваем налево: &quot;);
			_myAuto.MoveLeft();

			// Поворачиваем направо
			Console.Write(&quot;Поворачиваем направо: &quot;);
			_myAuto.MoveRight();

			// Останавливаем автомобиль
			Console.Write(&quot;Останавливаем автомобиль: &quot;);
			_myAuto.Stop();
			// Останавливаем автомобиль
			Console.Write(&quot;Пробуем еще раз остановить стоящий автомобиль: &quot;);
			_myAuto.Stop();
		}
	}
}</pre>
<p align="justify">Данный класс, является клиентским классом по отношению к классу <span class="code">Auto</span>, поэтому ему будут доступны только публичные свойства класса <span class="code">Auto</span>.</p>
<p><strong><em>Program.cs:</em></strong></p>
<pre class="brush: csharp">using OOPLibrary.Auto;

namespace OOPLibrary
{
	public class Program
	{
		public static void Main()
		{
			// Создаем инстанс объекта менеджера автомобиля
			var autoMng = new AutoManager();

			// К свойству _myAuto класса AutoManager доступ невозможен, так как он объявлен как private.
			// autoMng._myAuto.Start();    // Ошибка компилятора
			// Стартуем менеджер
			autoMng.Run();
		}
	}
}</pre>
<p align="justify">В основной программе (являющейся клиентом, как для класса <span class="code">Auto</span>, так и для класса <span class="code">AutoManager</span>), доступны оба класса (<span class="code">Auto</span> и <span class="code">AutoManager</span>) так как оба этих класса объявлены с модификатором <span class="code">public</span>, но с данного класса также невозможен доступ к приватным свойствам обоих из вышеприведенных классов.</p>
<p><u>Результат работы данной программы:</u></p>
<p><a href="http://generaltea.ru/wp-content/uploads/2011/10/OOPLibOutput.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="OOPLibOutput" border="0" alt="OOPLibOutput" src="http://generaltea.ru/wp-content/uploads/2011/10/OOPLibOutput_thumb.png" width="570" height="295" /></a></p>
<p align="justify">Вышеприведенный код хорошо документирован в комментариях, так что думаю большого смысла объяснять что он делает нету.</p>
<h3>Наследование.</h3>
<p align="justify"><strong>Наследование</strong> – возможность использовать общий код для всех потомков наследованных от общего родителя. При помощи наследования, можно вынести общие черты каких-то объектов и описать их в отдельном классе, а потом создать потомков от данного класса и в нем добавить свойства и методы присущие, только данному конкретному экземпляру.</p>
<p align="justify">К примеру можно описать какой либо абстрактный автомобиль, вынеся его общие свойства (мотор, имя, марку, год выпуска) в общий класс <span class="code">Auto</span>, а потом сделать наследников от него, описывающих грузовой, легковой или спортивный автомобили. Таким образом общие свойства для всех типов автомобилей придется реализовать всего лишь один раз, в классе <span class="code">Auto</span>, а все наследники получат их автоматически и расширят их свойствами и методами доступными только конкретному типу автомобиля.</p>
<p align="justify">Наследование очень тесно связанно с полиморфизмом, поэтому, в комментариях к следующим классам, можно увидеть примечания о том какая часть относится к полиморфизму. Саму суть полиморфизма рассмотрим немного ниже в этом посте.</p>
<p><em><strong>Shape.cs:</strong></em></p>
<pre class="brush: csharp">namespace OOPLibrary.Shape
{
	/// &lt;summary&gt;
	/// Абстрактный класс фигур, инстанс данного класса создать невозможно,
	/// можно создавать только неабстрактных наследников
	/// &lt;/summary&gt;
	public abstract class Shape
	{
		/// &lt;summary&gt;
		/// Свойство бумаги будет доступно во всех наследниках
		/// оно будет общим для всех наследников, поэтому
		/// в наследниках ненужно будет писать один и тот же код
		/// &lt;/summary&gt;
		public string Paper { get { return &quot;Белая бумага&quot;; } }

		/// &lt;summary&gt;
		/// Свойство абстрактное, то есть в наследниках его нужно обязательно перекрыть,
		/// то есть описать логику повдеения этого свойства - это и есть полиморфизм
		/// &lt;/summary&gt;
		public abstract string Name { get; }
		/// &lt;summary&gt;
		/// Метод абстрактный, то есть в наследниках его нужно обязательно перекрыть,
		/// то есть описать логику повдеения этого метода - это и есть полиморфизм
		/// &lt;/summary&gt;
		public abstract void Draw();
	}
}</pre>
<p align="justify">Класс <span class="code">Shape</span> (Фигура), является абстрактным классом, и содержит внутри себя свойства и методы общие для всех фигур, которые могут быть созданы на основании данного класса (Круг, Прямоугольник, Треугольник и т.д.).</p>
<p><em><strong>Circle.cs:</strong></em></p>
<pre class="brush: csharp">using System;

namespace OOPLibrary.Shape
{
	/// &lt;summary&gt;
	/// Класс описывающий круг наследованный от класса фигуры (Shape).
	/// Свойство Paper доступно и в классе Circle, хотя тут оно и не описано.
	/// &lt;/summary&gt;
	public class Circle : Shape // наследование
	{
		// Свойства присущие только этому классу, которых не было у родителя
		// При приведении данного типа к базовому классу (Shape), эти свойства
		// будут недоступны. Пример будет показан в классе ShapeManager
		public int X1;
		public int Y1;
		public int Radius;

		// Конструктор для инициализации точек на координатной плоскости
		public Circle()
		{
			// точка центра круга
			X1 = 1; Y1 = 4;
			// радиус
			Radius = 3;
		}

		/// &lt;summary&gt;
		/// Имплементирует свойство из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override string Name
		{
			get { return &quot;Круг&quot;; }
		}
		/// &lt;summary&gt;
		/// Имплементирует метод из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override void Draw()
		{
			Console.WriteLine(String.Format(&quot;Рисуем круг с центром X1,Y1:({0},{1}) и радиусом {2}&quot;, X1, Y1, Radius));
		}
	}
}</pre>
<p align="justify">Класс <span class="code">Circle</span> (Круг) – унаследован от класса Shape, поэтому он получил все свойства и методы присущие в классе <span class="code">Shape</span>. А так же данный класс добавляет свойства, которые присущи только кругу – это координаты центра круга и его радиус.</p>
<p><em><strong>Rectangle.cs:</strong></em></p>
<pre class="brush: csharp">using System;

namespace OOPLibrary.Shape
{
	/// &lt;summary&gt;
	/// Класс описывающий прямоугольник наследованный от класса фигуры (Shape).
	/// Свойство Paper доступно и в классе Rectangle, хотя тут оно и не описано.
	/// &lt;/summary&gt;
	public class Rectangle : Shape // наследование
	{
		// Свойства присущие только этому классу, которых не было у родителя
		// При приведении данного типа к базовому классу (Shape), эти свойства
		// будут недоступны. Пример будет показан в классе ShapeManager
		public int X1;
		public int Y1;
		public int X2;
		public int Y2;

		// Конструктор для инициализации точек на координатной плоскости
		public Rectangle()
		{
			// точка левого верхнего угла
			X1 = 1; Y1 = 4;
			// точка правого нижнего угла
			X2 = 6; Y2 = 1;
		}

		/// &lt;summary&gt;
		/// Имплементирует свойство из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override string Name
		{
			get { return &quot;Прямоугольник&quot;; }
		}
		/// &lt;summary&gt;
		/// Имплементирует метод из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override void Draw()
		{
			Console.WriteLine(String.Format(&quot;Рисуем прямоугольник X1,Y1:({0},{1}); X2,Y2:({2},{3});&quot;, X1, Y1, X2, Y2));
		}
	}
}</pre>
<p align="justify">Класс <span class="code">Rectangle</span> (Прямоугольник) добавляет к общим свойствам фигуры свои уникальные свойства, такие как координата верхнего левого и нижнего правого угла, на их основании на плоскости можно нарисовать прямоугольник. Если бы понадобилось сделать квадрат, а как известно это особый вид того же прямоугольника, можно было бы унаследовать класс квадрата, не от фигуры, а от прямоугольника, добавив проверку в свойства координат точек, чтобы стороны были равны, тогда дерево классов подвинулось бы еще не одну ветку ниже.</p>
<p><strong><em>Triangle.cs:</em></strong></p>
<pre class="brush: csharp">using System;

namespace OOPLibrary.Shape
{
	/// &lt;summary&gt;
	/// Класс описывающий треугольник наследованный от класса фигуры (Shape).
	/// Свойство Paper доступно и в классе Triangle, хотя тут оно и не описано.
	/// &lt;/summary&gt;
	public class Triangle : Shape // наследование
	{
		// Свойства присущие только этому классу, которых не было у родителя
		// При приведении данного типа к базовому классу (Shape), эти свойства
		// будут недоступны. Пример будет показан в классе ShapeManager
		public int X1;
		public int Y1;
		public int X2;
		public int Y2;
		public int X3;
		public int Y3;

		// Конструктор для инициализации точек на координатной плоскости
		public Triangle()
		{
			X1 = 1; Y1 = 1;
			X2 = 1; Y2 = 4;
			X3 = 6; Y3 = 1;
		}

		/// &lt;summary&gt;
		/// Имплементирует свойство из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override string Name
		{
			get { return &quot;Треугольник&quot;; }
		}
		/// &lt;summary&gt;
		/// Имплементирует метод из базового класса (наследование и полиморфизм)
		/// &lt;/summary&gt;
		public override void Draw()
		{
			Console.WriteLine(String.Format(&quot;Рисуем треугольник X1,Y1:({0},{1}); X2,Y2:({2},{3}); X3,Y3:({4},{5});&quot;, X1, Y1, X2, Y2, X3, Y3));
		}
	}
}</pre>
<p align="justify">По аналогии с прямоугольником и кругом, создан класс <span class="code">Triangle</span> (Треугольник), он тоже добавляет свои уникальные свойства.</p>
<p align="justify">На самом деле, во всех вышеприведенных классов, кроме наследования, показан также и полиморфизм. То есть абстрактные метод <span class="code">Draw</span> и свойство <span class="code">Name</span> были переопределены в каждом из наследников, а переопределение поведения и называется полиморфизмом.</p>
<h3>Полиморфизм.</h3>
<p align="justify"><strong>Полиморфизм</strong> – возможность подмены некоторых методов или свойств для задания им другого поведения.</p>
<p align="justify">В приведенном ниже классе, будут созданы объекты и помещены в коллекцию фигур, а далее при помощи полиморфизма будут вызваны методы конкретного объекта даже не глядя на то что все они помещены в список абстрактных фигур. Правда доступны будут только общие свойства и методы для всех экземпляров.</p>
<p><strong><em>ShapeManager.cs:</em></strong></p>
<pre class="brush: csharp">using System;
using System.Collections.Generic;

namespace OOPLibrary.Shape
{
	/// &lt;summary&gt;
	/// Класс управления фигурами.
	/// &lt;/summary&gt;
	public class ShapeManager
	{
		private Circle _circle;
		private Rectangle _rectangle;
		private Triangle _triangle;

		private List&lt;Shape&gt; _shapes;

		// Конструктор класса, в нем создаются первоначальные объекты
		public ShapeManager()
		{
			// Создаем объект круг
			_circle = new Circle();
			// Создаем объект прямоугольник
			_rectangle = new Rectangle();
			// Создаем объект треугольник
			_triangle = new Triangle();

			// Невозможно создать объект из абстрактного класса фигуры,
			// но можно создать объекты из его наследников: круга, прямоугольника и треугольника,
			// а также можно создать список и з абстрактных фигур, и положить в него объекты
			// наследников, но при проходе этого списка в цикле будут доступны только
			// общие поля и методы из абстрактоного класса Shape
			//Shape shape = new Shape();&#160;&#160;&#160; // Ошибка компилятора

			// Создаем список фигур, в него можно положить те объекты,&#160; // которые отнаследованы от класса Shape
			_shapes = new List&lt;Shape&gt;();
			_shapes.Add(_circle);&#160;&#160;&#160;&#160;&#160;&#160;&#160; // добавляем круг в список фигур
			_shapes.Add(_rectangle);&#160;&#160;&#160;&#160; // добавляем прямоугольник в список фигур
			_shapes.Add(_triangle);&#160;&#160;&#160;&#160;&#160; // добавляем треугольник в список фигур
		}

		/// &lt;summary&gt;
		/// Метод вывводит информацию о круге
		/// &lt;/summary&gt;
		private void ProntCircleInfo()
		{
			Console.WriteLine(_circle.Name);
			Console.WriteLine(&quot;X1: &quot; + _circle.X1);
			Console.WriteLine(&quot;Y1: &quot; + _circle.Y1);
			Console.WriteLine(&quot;Радиус: &quot; + _circle.Radius);
			_circle.Draw();
			Console.WriteLine();
		}

		/// &lt;summary&gt;
		/// Метод вывводит информацию о прямоугольнике
		/// &lt;/summary&gt;
		private void PrintRectangleInfo()
		{
			Console.WriteLine(_rectangle.Name);
			Console.WriteLine(&quot;X1: &quot; + _rectangle.X1);
			Console.WriteLine(&quot;Y1: &quot; + _rectangle.Y1);
			Console.WriteLine(&quot;X2: &quot; + _rectangle.X2);
			Console.WriteLine(&quot;Y2: &quot; + _rectangle.Y2);
			_rectangle.Draw();
			Console.WriteLine();
		}

		/// &lt;summary&gt;
		/// Метод вывводит информацию о треуголнике
		/// &lt;/summary&gt;
		private void PrintTriangleInfo()
		{
			Console.WriteLine(_triangle.Name);
			Console.WriteLine(&quot;X1: &quot; + _triangle.X1);
			Console.WriteLine(&quot;Y1: &quot; + _triangle.Y1);
			Console.WriteLine(&quot;X2: &quot; + _triangle.X2);
			Console.WriteLine(&quot;Y2: &quot; + _triangle.Y2);
			Console.WriteLine(&quot;X3: &quot; + _triangle.X3);
			Console.WriteLine(&quot;Y3: &quot; + _triangle.Y3);
			_triangle.Draw();
			Console.WriteLine();
		}

		/// &lt;summary&gt;
		/// Метод выводит общую информацию для всех наследников,
		/// находящихся в списке фигур
		/// &lt;/summary&gt;
		private void PrintCommonShapeInfo()
		{
			foreach (var shape in _shapes)
			{
				// общие свойства доступны для всех фигур (Name и Paper).
				// независимо от того какая конкретная фигура, будет находится
				// в данный моемент в переменно shape доступ к ее полям,
				// например X1, Y1, Radius будут недоступны без предварительного
				// явного приведения к конкретному типу (Circle, Triangle...)
				Console.WriteLine(String.Format(&quot;{0} будет нарисован на '{1}'...&quot;, shape.Name, shape.Paper));
				// метод доступен для всех фигур, но при помощи полиморфизма,
				// он перекрты в каждом наследнике, таким образом,
				// чтобы каждый объект мог реализовать свой механизм отрисовки самомго себя.
				// поэтому в runtime будет подставлен нужный метод конкретного наследника,
				// несмотря на то, что список хранит абстрактные фигуры
				shape.Draw();
				Console.WriteLine();
			}
		}
		/// &lt;summary&gt;
		/// Метод запускает проверку методов и свойств фигур и их наследников.
		/// &lt;/summary&gt;
		public void Run()
		{
			// выводим информацию, доступную для круга
			ProntCircleInfo();
			// выводим информацию, доступную для прямоугольника
			PrintRectangleInfo();
			// выводим информацию, доступную для треугольника
			PrintTriangleInfo();
			// проверяем возможности полиморфизма
			PrintCommonShapeInfo();
		}
	}
}</pre>
<p align="justify">В комментариях к свойствам и методам довольно хорошо расписано применение и предназначение каждого из членов класса, поэтому не имеет большого смысла углубляться в это более детально.</p>
<p><em><strong>Program.cs:</strong></em></p>
<pre class="brush: csharp">using OOPLibrary.Shape;

namespace OOPLibrary
{
	public class Program
	{
		public static void Main()
		{
			// Создаем инстанс объекта менеджера фигур
			var shapeMng = new ShapeManager();
			// Стартуем менеджер
			shapeMng.Run();
		}
	}
}</pre>
<p><u>Результат работы данной программы:</u></p>
<p><a href="http://generaltea.ru/wp-content/uploads/2011/10/ShapeOutput.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ShapeOutput" border="0" alt="ShapeOutput" src="http://generaltea.ru/wp-content/uploads/2011/10/ShapeOutput_thumb.png" width="570" height="386" /></a></p>
<p align="justify">Вот так вот вкратце можно описать все три столпа ООП. Ничего сложного и сверхъестественного, нужно только немного опыта, чтобы научится правильно определять свойства и методы реальных классов из реальных задач, но это все приходит с опытом, а тут мы всего лишь рассмотрели основы объектно-ориентированного программирования.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/328eMGE5X9gG1bbJklmsbbvvm6E/0/da"><img src="http://feedads.g.doubleclick.net/~a/328eMGE5X9gG1bbJklmsbbvvm6E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/328eMGE5X9gG1bbJklmsbbvvm6E/1/da"><img src="http://feedads.g.doubleclick.net/~a/328eMGE5X9gG1bbJklmsbbvvm6E/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/inkapsulyaciya-nasledovanie-polimorfizm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/inkapsulyaciya-nasledovanie-polimorfizm/</feedburner:origLink></item>
		<item>
		<title>Основы ООП</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/UASCCSZ8oKU/</link>
		<comments>http://generaltea.ru/osnovy-oop/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 10:44:30 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[ООП]]></category>
		<category><![CDATA[основы программирования]]></category>

		<guid isPermaLink="false">http://generaltea.ru/osnovy-oop/</guid>
		<description><![CDATA[Общаясь со многими ребятами, которые желают научиться программировать, я натыкаюсь на одну тему, которая вначале для них кажется очень сложной и неподъёмной – это ООП (Объектно-ориентированное программирование). Многим начинающим всегда кажется, что процедурное программирование проще. Не исключено что в этом есть доля правды, но давайте подумаем, какими терминами привыкли мы мыслить в повседневной жизни. Посмотрите [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-oop%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-oop%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p align="justify">Общаясь со многими ребятами, которые желают научиться программировать, я натыкаюсь на одну тему, которая вначале для них кажется очень сложной и неподъёмной – это <strong>ООП (Объектно-ориентированное программирование)</strong>. Многим начинающим всегда кажется, что процедурное программирование проще. Не исключено что в этом есть доля правды, но давайте подумаем, какими терминами привыкли мы мыслить в повседневной жизни.</p>
<p align="justify">Посмотрите на обычное здание, что вы видите в первую очередь? Я надеюсь, что это окна, двери, крыша и т.д., а не песок, цемент, кирпич, стекло. То есть в повседневной жизни мы привыкли думать объектами, а не их составляющими. Некоторые из объектов могут быть абстрактными, как, например, фигура – это абстрактное понятие, а не конкретное, как  квадрат или круг. Точно так же происходит в ООП, у нас есть объекты и есть их составляющие. Вы можете использовать объект не задумываясь о его составляющих это упростит вашу жизнь, иногда незачем знать внутренности того как устроен объект, для того, чтобы начать его использовать. Например, автомобиль – для его управления вам не обязательно знать из каких деталей состоит мотор или коробка передач, вам достаточно знать, что при нажатии на педаль газа автомобиль поедет быстрее, а при нажатии на тормоз, он остановится. Точно то же и с объектами в программировании, вам достаточно знать, что при вызове метода <strong>Draw</strong> у объекта <strong>Shape</strong> будет нарисована фигура, при этом не обязательно знать как работает видеокарта и монитор и как изображение на него выводится.</p>
<p align="justify"><span id="more-629"></span>Изначально все учат и легче всего понимают процедурное программирование, потому что оно кажется проще, но это обман – объектно-ориентированное программирование отображает процесс нашего мышления.</p>
<p>Есть три основных столпа ООП:</p>
<ul>
<li>
<div align="justify"><strong>Инкапсуляция</strong> – возможность скрытия реализации каких то частей модуля или объекта от внешнего мира (от клиента).</div>
</li>
<li>
<div align="justify"><strong>Наследование</strong> – возможность использовать общий код для всех потомков наследованных от общего родителя.</div>
</li>
<li>
<div align="justify"><strong>Полиморфизм</strong> – возможность подмены некоторых методов или свойств для задания им другого поведения.</div>
</li>
</ul>
<p align="justify">Вот в этом и заключается все ООП. Более подробно каждый из этих столпов я распишу в последующих постах, а сейчас хочу упомянуть одну немаловажную деталь, для лучшего понимания некоторых понятий.</p>
<p align="justify">Есть два понятия встречающихся повсеместно, и раньше я довольно часто сам их путал и не мог понять разницу между ними – это <strong>класс</strong> и <strong>объект</strong>. Но после объяснения своему отцу, по профессии строитель, чем я занимаюсь, и я нашел одно хорошее сравнение, и после этого в моей голове все стало на свои места. Приведу это сравнение здесь, надеюсь что и другим оно поможет понять сущности этих слов в ООП.</p>
<p align="justify"><strong>Класс</strong> – это как бы аналог чертежа, на основании которого можно построить много одинаковых домов – <strong>объектов</strong>. Поэтому класс только описывает объект, но не создает его.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/NbF2yR-j7WotLkedBnuCJONdWEQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/NbF2yR-j7WotLkedBnuCJONdWEQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/NbF2yR-j7WotLkedBnuCJONdWEQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/NbF2yR-j7WotLkedBnuCJONdWEQ/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/osnovy-oop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://generaltea.ru/osnovy-oop/</feedburner:origLink></item>
		<item>
		<title>Как поменять кодировку всех таблиц в MySQL</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/KccZGwSn-Zo/</link>
		<comments>http://generaltea.ru/kak-pomenyat-kodirovku-vsex-tablic-v-mysql/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 23:16:10 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[кодировка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=619</guid>
		<description><![CDATA[Иногда бывает так, что из доступа к базе данных бывает только доступ через phpMyAdmin. А также бывает, что кто-то, создал базу с неправильной кодировкой. В моем случае этой кодировкой была&#160;&#8212; шведская. Что же делать для того чтобы поменять кодировку на более нужную&#160;&#8212; к примеру utf8? Для этого существует очень простой способ. Необходимо выполнить вот такой [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fkak-pomenyat-kodirovku-vsex-tablic-v-mysql%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fkak-pomenyat-kodirovku-vsex-tablic-v-mysql%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">Иногда бывает так, что из доступа к базе данных бывает только доступ через phpMyAdmin. А также бывает, что кто-то, создал базу с неправильной кодировкой. В моем случае этой кодировкой была&nbsp;&mdash; шведская. Что же делать для того чтобы поменять кодировку на более нужную&nbsp;&mdash; к примеру <strong>utf8</strong>?</p>
<p style="text-align: justify;">Для этого существует очень простой способ. Необходимо выполнить вот такой вот запрос при помощи редактора <strong>SQL </strong>в phpMyAdmin:</p>
<pre class="brush: sql">ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]</pre>
<p style="text-align: justify;">Все бы было ничего, если бы табличек было немного, или хотя бы полей. Но вот беда, табличек может быть и 30 и 40, а лично я очень ленивый, чтобы перебирать их все ручками, да к тому же надо не забыть поменять кодировку также в каждом текстовом поле. Пришлось немножко пошаманить, и вуаля, результат не заставил себя долго ждать.</p>
<p><span id="more-619"></span></p>
<p style="text-align: justify;">Итак, MySQL сервер версии 5.0 и выше, умеет выполнить вот такой вот запрос:</p>
<pre class="brush: sql">SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
  FROM `information_schema`.`TABLES` t
 WHERE 1
   AND t.`TABLE_SCHEMA` = 'db_name'
 ORDER BY 1</pre>
<p style="text-align: justify;">в этом запросе, вместо <span class="code">db_name</span> необходимо поменять на реальное имя базы данных, кодировку которой вы собираетесь менять.</p>
<p style="text-align: justify;">Выполнив этот запрос, мы получим еще один SQL, модифицирующий кодировку таблиц, он будет выглядеть примерно так:</p>
<pre class="brush: sql">ALTER TABLE `mydatabase`.`auth_group_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_group` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_message` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_permission` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_groups` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user_user_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`auth_user` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`blog_post` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_admin_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comments` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_comment_flags` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_content_type` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`django_session` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_album` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_photo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`gallery_video` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `mydatabase`.`members_userprofile` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;</pre>
<p style="text-align: justify;">Вот теперь можно копировать результирующий скрипт и выполнять его в окошке SQL зпросов. Результатом выполнения данного скрипта будет <strong>изменение кодировки во всех таблицах MySQL базы данных</strong>.</p>
<p style="text-align: justify;">Вот так можно сэкономить кучу времени отдав выполнение кучи грязной работы всякого рода автоматизации <img src='http://generaltea.ru/wp-content/plugins/smilies-themer/adiumicons/happy.png' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/xznUYiQi2ECYpk_dzvgpngR0n5g/0/da"><img src="http://feedads.g.doubleclick.net/~a/xznUYiQi2ECYpk_dzvgpngR0n5g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xznUYiQi2ECYpk_dzvgpngR0n5g/1/da"><img src="http://feedads.g.doubleclick.net/~a/xznUYiQi2ECYpk_dzvgpngR0n5g/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/kak-pomenyat-kodirovku-vsex-tablic-v-mysql/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://generaltea.ru/kak-pomenyat-kodirovku-vsex-tablic-v-mysql/</feedburner:origLink></item>
		<item>
		<title>Какая разница между фреймворком и архитектурой</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/Acj-97kv5NU/</link>
		<comments>http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 10:37:02 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[фреймворк]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=608</guid>
		<description><![CDATA[Иногда у людей возникает вопрос: какая разница между фреймворком и архитектурой. Совершенно случайно увидел обалденный ответ на Stack Overflow. Размещу его и у себя. Фреймворк (Framework): Архитектура (Architecture): По другому можно еще сказать так: архитектура&#160;&#8212; теория,  фреймворк&#160;&#8212; ее реализация.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fkakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fkakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">Иногда у людей возникает вопрос: <em>какая разница между фреймворком и архитектурой</em>.</p>
<p style="text-align: justify;">Совершенно случайно увидел обалденный ответ на Stack Overflow. Размещу его и у себя.</p>
<h3>Фреймворк (Framework):</h3>
<p><a rel="attachment wp-att-609" href="http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/instrument/"><img class="aligncenter size-full wp-image-609" title="Инструменты" src="http://generaltea.ru/wp-content/uploads/2010/12/instrument.jpg" alt="Инструменты" width="500" height="289" /></a></p>
<h3>Архитектура (Architecture):</h3>
<p><a rel="attachment wp-att-609" href="http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/instrument/"></a><a rel="attachment wp-att-611" href="http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/architecture-plan/"><img class="aligncenter size-large wp-image-611" title="Чертеж" src="http://generaltea.ru/wp-content/uploads/2010/12/architecture-plan-580x352.png" alt="Чертеж" width="580" height="352" /></a></p>
<p style="text-align: justify;">По другому можно еще сказать так: архитектура&nbsp;&mdash; теория,  фреймворк&nbsp;&mdash; ее реализация.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/IN-tQizJ37f4rruuCjpy86pR7sE/0/da"><img src="http://feedads.g.doubleclick.net/~a/IN-tQizJ37f4rruuCjpy86pR7sE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IN-tQizJ37f4rruuCjpy86pR7sE/1/da"><img src="http://feedads.g.doubleclick.net/~a/IN-tQizJ37f4rruuCjpy86pR7sE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/kakaya-raznica-mezhdu-frejmvorkom-i-arxitekturoj/</feedburner:origLink></item>
		<item>
		<title>Основы CSS. Базовые понятия</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/Ymg-jnIkb_w/</link>
		<comments>http://generaltea.ru/osnovy-css-bazovye-ponyatiya/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 08:38:09 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Верстка, HTML, CSS]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[веб-сайт]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=584</guid>
		<description><![CDATA[Прежде чем переходить к дальнейшему рассмотрению HTML, в частности тега &#60;body&#62;, необходимо разобраться, хотя бы, с основными понятиями CSS. Итак, CSS (Cascading Style Sheets — каскадные таблицы стилей) — технология описания внешнего вида документа, написанного языком разметки, в основном это будет HTML. Или, другими словами&#160;&#8212; это технология, которая позволит изменять цвета, стиль шрифта, размер блоков (элментов, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-css-bazovye-ponyatiya%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-css-bazovye-ponyatiya%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">Прежде чем переходить к дальнейшему рассмотрению HTML, в частности тега <span class="code">&lt;body&gt;</span>, необходимо разобраться, хотя бы, с основными понятиями <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>.</p>
<p style="text-align: justify;"><a href="http://generaltea.ru/?attachment_id=591"><img style="background-image: none; padding: 0 10px 0 0; display: inline; float: left; border-width: 0px;" title="CSS" src="http://generaltea.ru/wp-content/uploads/2010/08/css-300x200.jpg" border="0" alt="CSS" width="300" height="200" align="left" /></a>Итак, <strong>CSS</strong> (<em>Cascading Style Sheets</em> — <strong>каскадные таблицы стилей</strong>) — технология описания внешнего вида документа, написанного языком разметки, в основном это будет HTML. Или, другими словами&nbsp;&mdash; это технология, которая позволит изменять цвета, стиль шрифта, размер блоков (элментов, тегов языка HTML).</p>
<p style="text-align: justify;"><strong><em>Для чего придумли <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>?</em></strong></p>
<p style="text-align: justify;">Так как HTML никогда не предназначался для отображения внешнего вида документа, а был предназначен только для определения содержания (или схемы) документа, но не для указания того, какие цвета или шрифты использовать для отображения того или иного элемента (блока) в документе, например:</p>
<pre class="brush: html">
&lt;h1&gt;Это заголовок&lt;/h1&gt;
&lt;p&gt;Это абзац.&lt;/p&gt;
</pre>
<p style="text-align: justify;">Здесь тег <span class="code">&lt;h1&gt;</span> показывает, что текст внутри него будет заголовком, без указания каким стилем его отобразить. Точно таким же образом, тег <span class="code">&lt;p&gt;</span> указывает бразуеру, что текст внутри него является абзацем.</p>
<p style="text-align: justify;">Когда теги визуализации, такие как <span class="code">&lt;font&gt;</span>, и цветовые атрибуты были добавлены в спецификацию HTML 3.2, начался кошмар для веб-разработчиков. Развитие больших веб-сайтов, где шрифты и цветовую информацию необходимо было добавлять на каждую страницу, стало долгим и дорогостоящим процессом.</p>
<p style="text-align: justify;">Для решения этой проблемы, <strong>World Wide Web Consortium (W3C)</strong> создал <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>.</p>
<p style="text-align: justify;"><span id="more-584"></span>В спецификации HTML 4.0, все форматирование может быть удалено из документа HTML, и храниться в отдельном файле <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>. Это очень удобно, так как, если будет необходимо поменять внешний вид, например, всех обзацев на всех страницах сайта, то для этого достаточно всего лишь изменить несколько строчек в <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr> классе, а не перелопачивать сотни и даже тысячи страниц вебсайта для внесения изменнений во внешний вид. На сегодняшний день, все современные браузеры поддерживают <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>.</p>
<p style="text-align: justify;">При рендеринге страницы, стили для ее отображения, могут быть взяты из нескольких источников:</p>
<ul>
<li style="text-align: justify;"><strong>Авторские стили</strong>&nbsp;&mdash; стили, которые указал разработчик веб страницы, они могут быть указаны несколькими способами:
<ul>
<li style="text-align: justify;"><em>Внешняя таблица стилей</em> — располагается во внешнем файле стилей, с расширением <span class="code">.css</span>, и подключается к документу, при помощи ссылки на внешний файл, расположенной в <a href='http://generaltea.ru/osnovy-html-sekciya-head/'>секции <span class="code">&lt;head&gt;</span></a> HTML-документа.</li>
<li style="text-align: justify;"><em>Встроенные стили</em> — блоки <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr> располагаются внутри самого HTML-документа, <a href='http://generaltea.ru/osnovy-html-sekciya-head/'>опять же в секции <span class="code">&lt;head&gt;</span></a>.</li>
<li style="text-align: justify;"><em>Inline-стили</em> — указание стиля элемента непосредственно в определенном элементе, а точнее в его атрибуте <span class="code">style</span>.</li>
</ul>
</li>
<li style="text-align: justify;"><strong>Пользовательские стили</strong> — стили изменные конечным пользователем вручную<em> </em>
<ul>
<li style="text-align: justify;"><em>Локальный CSS-файл</em> — пользователь, указывает в настройках браузера путь к CSS файлу из которого браузер должен брать стили. При этом данный файл переопределяет авторские стили, и применяемый ко всем документам.</li>
</ul>
</li>
<li style="text-align: justify;"><strong>Стиль браузера</strong> — стили, которые заложены в браузере для элементов по умолчанию
<ul>
<li style="text-align: justify;"><em>Стандартный стиль</em>, используемый браузером по умолчанию для представления элементов.</li>
</ul>
</li>
</ul>
<p style="text-align: justify;">Таблица стилей состоит из набора правил. Правила состоят из селекторов, в которых описываются непосредственные свойства и их значения для данного селектора, или группы селекторов.</p>
<p>Например:</p>
<pre class="brush: css">div, p {
  font-family: "Arial", sans-serif;
  color: red;
  background: white;
}
</pre>
<p style="text-align: justify;">данный набор стилей определяет семейство шрифтов, цвет текста и его фон ко всем элементам заключенным в теги <span class="code">&lt;div&gt;</span> и <span class="code">&lt;p&gt;</span>. Таким образом можно переопределить отображение любого тега в HTML документе.</p>
<p style="text-align: justify;">Думаю, что для начального знакомстав с <abbr title="Cascading Style Sheets — каскадные таблицы стилей">CSS</abbr>, данной информации будет достаточно.</p>
<hr />
<p>
Намного удобнее за компом, когда тебе не мешают провода. При использовании <a href="http://www.getwifi.ru/">wi-fi</a> сетей, одним кабелем становиться меньше, и радость от работы в сети интернет возрастает.</p>
<hr />

<p><a href="http://feedads.g.doubleclick.net/~a/0ckcb3xr_DUYqwVpujXcExbczPA/0/da"><img src="http://feedads.g.doubleclick.net/~a/0ckcb3xr_DUYqwVpujXcExbczPA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0ckcb3xr_DUYqwVpujXcExbczPA/1/da"><img src="http://feedads.g.doubleclick.net/~a/0ckcb3xr_DUYqwVpujXcExbczPA/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/osnovy-css-bazovye-ponyatiya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/osnovy-css-bazovye-ponyatiya/</feedburner:origLink></item>
		<item>
		<title>Основы HTML. Секция head</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/-6Pvx8kc2PQ/</link>
		<comments>http://generaltea.ru/osnovy-html-sekciya-head/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 14:00:38 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Верстка, HTML, CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[веб-сайт]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=573</guid>
		<description><![CDATA[При взгляде на структуру HTML документа, видно, что она состоит из трех основных секций. &#60;html&#62; – корень любого HTML документа, в котором располагаются все остальные секции (данный тег должен быть в единственном экземпляре, и должен присутствовать на каждой странице). &#60;head&#62; – заголовок в котором прописывается служебная информация и инструкции браузеру, по отображению контента. &#60;body&#62; – [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-html-sekciya-head%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-html-sekciya-head%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">При взгляде на <a href='http://generaltea.ru/osnovy-html-struktura-dokumenta/'>структуру HTML документа</a>, видно, что она состоит из трех основных секций.</p>
<p><span class="code"><strong><a href="http://generaltea.ru/wp-content/uploads/2010/10/html_head.gif"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="html_head" src="http://generaltea.ru/wp-content/uploads/2010/10/html_head_thumb.gif" border="0" alt="html_head" width="240" height="220" align="left" /></a> </strong></span></p>
<ul>
<li style="text-align: justify;"><span class="code"><strong>&lt;html&gt;</strong></span> – корень любого HTML документа, в котором располагаются все остальные секции (данный тег должен быть в единственном экземпляре, и должен присутствовать на каждой странице).</li>
<li style="text-align: justify;"><span class="code"><strong>&lt;head&gt;</strong></span> – заголовок в котором прописывается служебная информация и инструкции браузеру, по отображению контента.</li>
<li style="text-align: justify;"><span class="code"><strong>&lt;body&gt;</strong></span> – основная секция в которой находится контент, то есть вся полезная информация (текст, картинки, видео). Помимо контента, в этой секции расположена сетка сайта, либо его макет – описано местоположения основных разделов сайта, таких как: шапка, подвал, главное меню, боковые колонки, и т.д.</li>
</ul>
<p style="text-align: justify;">Тег <span class="code">&lt;html&gt;</span> ничем особым не отличается, кроме того, что это есть корневой элемент – контейнер для всех остальных блоков. Поэтому приступим к более детальному рассмотрению секции <span class="code">&lt;head&gt;</span>.</p>
<p><span id="more-573"></span></p>
<p style="text-align: justify;">Элементы данной секции напрямую не показываются на веб странице. Единственный тег из данной секции, который будет отображать информацию – это тег <span class="code">&lt;title&gt;</span>. В теге <span class="code">&lt;title&gt;</span>, секции <span class="code">&lt;head&gt;</span>, прописывается заголовок веб-страницы этот текст будет выведен в строке заголовка окна браузера.</p>
<pre class="brush: html">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Заголовок, будет выведен в строке заголовка браузера&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!—Тут будет размещен контент—&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Данный тег является единым обязательном тегом в секции <span class="code">&lt;head&gt;</span>.</p>
<p><a href="http://generaltea.ru/wp-content/uploads/2010/10/title-in-head.gif"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="title-in-head" src="http://generaltea.ru/wp-content/uploads/2010/10/title-in-head_thumb.gif" border="0" alt="title-in-head" width="513" height="60" /></a></p>
<p style="text-align: justify;">Кроме тега <span class="code">&lt;title&gt;</span>, в этой секции можно размещать следующие теги: <span class="code">&lt;link&gt;</span>, <span class="code">&lt;meta&gt;</span>, <span class="code">&lt;script&gt;</span>, <span class="code">&lt;style&gt;</span>.</p>
<h3>Тег &lt;link&gt;</h3>
<p style="text-align: justify;">Этот тег указывает браузеру где находятся некие внешние ресурсы, например, внешние стили (CSS). Также при помощи тега <span class="code">&lt;link&gt;</span> и указания соответствующего атрибута <span class="code">rel</span>, можно указать адрес канала RSS, фавиконку для сайта, и другие внешние ресурсы.</p>
<pre class="brush: html">&lt;head&gt;
  &lt;link rel="stylesheet" type="text/css" href="theme.css" /&gt;
  &lt;link rel="alternate" type="application/rss+xml"
        title="Генеральский чай" href="http://generaltea.ru/feed/"&gt;
  &lt;link rel="shortcut icon" href="http://generaltea.ru/favicon.ico"&gt;
&lt;/head&gt;</pre>
<h3>Тег &lt;meta&gt;</h3>
<p style="text-align: justify;">Это универсальный тег, который описывает данные. Тег <span class="code">&lt;meta&gt;</span> предоставляет метаданные о документе HTML браузеру. Метаданные, не отображаются, а только используются для служебных целей, либо движком браузера, либо поисковыми пауками. Мета элементы, как правило, используется для описания страницы (<strong><em>description</em></strong>), указания ключевых слов (<strong><em>keywords</em></strong>), указание автора документа (<strong><em>author</em></strong>), указания типа контента и его кодировки, и другие метаданные.</p>
<pre class="brush: html">&lt;head&gt;
  &lt;meta name="description" content="Описание отсюда, выводится поисковиками" /&gt;
  &lt;meta name="keywords" content="HTML,CSS,верстка" /&gt;
  &lt;meta name="author" content="Sergii Mykhailov" /&gt;
  &lt;meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /&gt;
&lt;/head&gt;</pre>
<h3>Тег &lt;script&gt;</h3>
<p style="text-align: justify;">С помощью данного тега, можно указать браузеру, где он должен искать внешние скрипты:</p>
<pre class="brush: html">&lt;head&gt;
  &lt;script type="text/javascript"
          src="http://generaltea.ru/wp-includes/js/jquery/jquery-v1.4.2.js"&gt;
  &lt;/script&gt;
&lt;/head&gt;</pre>
<p style="text-align: justify;">либо же, вставить скрипт прямо в данную секцию:</p>
<pre class="brush: html">&lt;head&gt;
  &lt;script type="text/javascript"&gt;
    document.write("Hello World!")
  &lt;/script&gt;
&lt;/head&gt;</pre>
<h3>Тег &lt;style&gt;</h3>
<p style="text-align: justify;">Данный тег можно использовать, для того, чтобы задать стили, необходимые, только для этой странички, а также, если нету необходимости подключать внешний файл стилей, при помощи тега <span class="code">&lt;link&gt;</span>. Можно задавать более чем один тег <span class="code">&lt;style&gt;</span></p>
<pre class="brush: html">&lt;head&gt;
  &lt;style type="text/css"&gt;
    h1 {color: red}
    p  {color: blue}
  &lt;/style&gt;
&lt;/head&gt;</pre>
<p style="text-align: justify;">Вот и вся информация, которую необходимо знать о секции <span class="code">&lt;head&gt;</span>. Далее будем рассматривать секцию <span class="code">&lt;body&gt;</span>, которая будет содержать основной контент веб странички.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/VgXnWsyT0wKDbq5JjJq-XqZYa00/0/da"><img src="http://feedads.g.doubleclick.net/~a/VgXnWsyT0wKDbq5JjJq-XqZYa00/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VgXnWsyT0wKDbq5JjJq-XqZYa00/1/da"><img src="http://feedads.g.doubleclick.net/~a/VgXnWsyT0wKDbq5JjJq-XqZYa00/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/osnovy-html-sekciya-head/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/osnovy-html-sekciya-head/</feedburner:origLink></item>
		<item>
		<title>Таблица совместимости HTML тегов в разных DOCTYPE</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/ufbexo_eIas/</link>
		<comments>http://generaltea.ru/html-tags-doctype/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 19:41:34 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Верстка, HTML, CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[веб-сайт]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=546</guid>
		<description><![CDATA[Описание DOCTYPE будет неполным, если не привести таблицу, в которой указано, какой из тегов HTML поддерживается тем или иным объявлением DOCTYPE. Поэтому пользуемся этим замечательным справочником, оригинал которого можно найти на сайте w3schools.com. При использовании таблицы, не забываем о том что в спецификациях с приставкой X, необходимо придерживаться правил оформления веб-документа по спецификации XML. То [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fhtml-tags-doctype%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fhtml-tags-doctype%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;"><a href='http://generaltea.ru/doctype-v-html-dokumentax/'>Описание DOCTYPE</a> будет неполным, если не привести таблицу, в которой указано, какой из тегов HTML поддерживается тем или иным объявлением DOCTYPE.</p>
<p style="text-align: justify;">Поэтому пользуемся этим замечательным справочником, оригинал которого можно найти на сайте <a href="http://www.w3schools.com/tags/ref_html_dtd.asp" target="_blank">w3schools.com</a>.</p>
<p style="text-align: justify;">При использовании таблицы, не забываем о том что в спецификациях с приставкой X, необходимо придерживаться правил оформления веб-документа по спецификации XML. То есть, все теги должны быть обязательно закрыты. Все теги должны иметь общего родителя, которым в HTML документе является тег <span class="code">&lt;html&gt;&lt;/html&gt;</span>. Все атрибуты должны быть заключены в кавычки.</p>
<p><span id="more-546"></span></p>
<table border="1" cellspacing="0" cellpadding="2" width="100%">
<tbody>
<tr>
<th rowspan="2" width="20%" align="left" valign="middle">Тег</th>
<th colspan="3">HTML 4.01 / XHTML 1.0</th>
<th rowspan="2" width="20%" align="center" valign="middle">XHTML 1.1</th>
</tr>
<tr>
<th width="20%" align="center">Transitional</th>
<th width="20%" align="center">Strict</th>
<th width="20%" align="center">Frameset</th>
</tr>
<tr>
<td align="left">&lt;a&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;abbr&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;acronym&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;address&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;applet&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;area /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;b&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;base /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;basefont /&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;bdo&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;big&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;blockquote&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;body&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;br /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;button&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;caption&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;center&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;cite&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;code&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;col /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;colgroup&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;dd&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;del&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;dfn&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;dir&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;div&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;dl&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;dt&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;em&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;fieldset&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;font&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;form&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;frame /&gt;</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;frameset&gt;</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;h1&gt; to &lt;h6&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;head&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;hr /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;html&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;i&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;iframe&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;img /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;input /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;ins&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;isindex&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;kbd&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;label&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;legend&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;li&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;link /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;map&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;menu&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;meta /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;noframes&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;noscript&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;object&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;ol&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;optgroup&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;option&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;p&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;param /&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;pre&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;q&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;s&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;samp&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;script&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;select&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;small&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;span&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;strike&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;strong&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;style&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;sub&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;sup&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;table&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;tbody&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;td&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;textarea&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;tfoot&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;th&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;thead&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;title&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;tr&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;tt&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;u&gt;</td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
<td align="center">есть</td>
<td align="center"><strong>НЕТ</strong></td>
</tr>
<tr>
<td align="left">&lt;ul&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
<tr>
<td align="left">&lt;var&gt;</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
<td align="center">есть</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p style="text-align: justify;">Описывать каждый из тегов, приведенных в данной таблице, не имеет ни малейшего смысла, так как все они уже даавно описаны на других ресурсах. Мне еще не доводилось встречать наиболее полного описания тегов и всех сопутствующих аттрибутов на просторах рунета, чем это сделано на сайте <a href="http://htmlbook.ru/html" target="_blank">htmlbook.ru</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/uczlb0q9ZHUZUrn9WDmtSHpCiQk/0/da"><img src="http://feedads.g.doubleclick.net/~a/uczlb0q9ZHUZUrn9WDmtSHpCiQk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uczlb0q9ZHUZUrn9WDmtSHpCiQk/1/da"><img src="http://feedads.g.doubleclick.net/~a/uczlb0q9ZHUZUrn9WDmtSHpCiQk/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/html-tags-doctype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/html-tags-doctype/</feedburner:origLink></item>
		<item>
		<title>Для чего нужен DOCTYPE в HTML документах</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/o64txQ-dxIY/</link>
		<comments>http://generaltea.ru/doctype-v-html-dokumentax/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 14:46:51 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Верстка, HTML, CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[веб-сайт]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=524</guid>
		<description><![CDATA[Как я заметил в посте Основы HTML. Структура документа, первой строкой в документе HTML, должно идти объявление DOCTYPE. Этим постом, я расскажу что это такое и с чем его едят. Определение DOCTYPE&#160;-&#160;это не тег HTML, а инструкция веб-браузеру, указывающая, на какой версии языка HTML написан документ (веб страничка). DOCTYPE ссылается на определение типа документа (DTD&#160;&#8212; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fdoctype-v-html-dokumentax%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fdoctype-v-html-dokumentax%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">Как я заметил в посте <a href='http://generaltea.ru/osnovy-html-struktura-dokumenta/'>Основы HTML. Структура документа</a>, первой строкой в документе HTML, должно идти <strong>объявление DOCTYPE</strong>. Этим постом, я расскажу что это такое и с чем его едят.</p>
<p style="text-align: justify;"><strong>Определение DOCTYPE</strong>&nbsp;-&nbsp;это не тег HTML, а инструкция веб-браузеру, указывающая, на какой версии языка HTML написан документ (веб страничка).</p>
<p style="text-align: justify;"><strong>DOCTYPE</strong> ссылается на определение типа документа (<strong>DTD&nbsp;&mdash; Document Type Definition</strong>). DTD задает правила для языка разметки, для того чтобы браузеры могли правильно отобразить содержание веб странички.</p>
<p style="text-align: justify;">Рассмотрим все доступные <strong>варианты DOCTYPE по рекомендации W3C</strong>.</p>
<p><span id="more-524"></span></p>
<p style="text-align: justify;"><strong>HTML 4.01 Strict</strong></p>
<p style="text-align: justify;">Этот DTD содержит все HTML элементы и атрибуты, но не включает презентационные или устаревшие элементы (например: тег <span class="code">font</span>). Использование фреймов не допускается.</p>
<pre class="brush: html">&lt;!DOCTYPE HTML PUBLIC "- / / W3C / / DTD HTML 4.01 / / EN"
          "http://www.w3.org/TR/html4/strict.dtd"&gt;</pre>
<p style="text-align: justify;"><strong>HTML 4.01 Transitional</strong></p>
<p style="text-align: justify;">Данный DTD содержит все HTML элементы и атрибуты, включая презентационные и устаревшие элементы (например: тег <span class="code">font</span>). Использование фреймов в документе объявленном с таким DOCTYPE также не допускается.</p>
<pre class="brush: html">&lt;!DOCTYPE HTML PUBLIC "- / / W3C / / DTD HTML 4.01 Transitional / / EN"
          "http://www.w3.org/TR/html4/loose.dtd"&gt;</pre>
<p style="text-align: justify;"><strong>HTML 4.01 Frameset</strong></p>
<p style="text-align: justify;">Следующий DTD, такой же как и HTML 4.01 Transitional, но позволяет использование фреймов в содержании документа.</p>
<pre class="brush: html">&lt;!DOCTYPE HTML PUBLIC "- / / W3C / / DTD HTML 4.01 Frameset / / EN"
          "http://www.w3.org/TR/html4/frameset.dtd"&gt;</pre>
<p style="text-align: justify;"><em>Примечание:</em> в целом, в современном веб дизайне, фреймы не используются вовсе. Так что, данный DOCTYPE, можно считать устаревшим.</p>
<p style="text-align: justify;"><strong>XHTML 1.0 Strict</strong></p>
<p style="text-align: justify;">DTD, который содержит все HTML элементы и атрибуты, но не включает презентационные или устаревшие элементы (например, все тот же, тег <span class="code">font</span>). Использование фреймов не допускается. Разметка веб страницы должна быть оформлена по всем правилам документа XML. То есть, все теги должны быть обязательно закрыты. Все теги должны иметь общего родителя, которым в HTML документе является тег <span class="code">&lt;html&gt;&lt;/html&gt;</span>. Все атрибуты должны быть заключены в кавычки.</p>
<pre class="brush: html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</pre>
<p style="text-align: justify;">В настоящее время, как по мне, данный DOCTYPE является наиболее предпочтительным для наиболее валидной верстки.</p>
<p style="text-align: justify;"><strong>XHTML 1.0 Transitional</strong></p>
<p style="text-align: justify;">И еще один переходной DTD, который содержит все HTML элементы и атрибуты, включая презентационные и устаревшие элементы (например: тег <span class="code">center</span>). Использование фреймов, данный DTD, также не допускает. Разметка веб страницы тоже должна быть оформлена по всем правилам документа XML.</p>
<pre class="brush: html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</pre>
<p style="text-align: justify;"><strong>XHTML 1.0 Frameset</strong></p>
<p style="text-align: justify;">И еще один DTD с фреймами, аналогичен XHTML 1.0 Transitional, но позволяет использование фреймов в содержании веб документа.</p>
<pre class="brush: html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</pre>
<p style="text-align: justify;"><strong>XHTML 1.1</strong></p>
<p style="text-align: justify;">И последний DTD, аналогичен XHTML 1.0 Strict, но позволяет добавлять модули (например, обеспечить поддержку Ruby для Восточно-азиатских языков).</p>
<pre class="brush: html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;</pre>
<p style="text-align: justify;">В следующем посте можно будет посмотреть на <a href='http://generaltea.ru/html-tags-doctype/'>таблицу всех HTML / XHTML элементов</a>, которые поддерживаются в той или иной DTD.</p>
<p style="text-align: justify;">Для проверки <strong>валидности HTML документа</strong> можно воспользоваться <a href="http://validator.w3.org/" target="_blank">валидатором W3C Validator</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/w1T76ctb4VRcAZ9LBWu-xIe_Gow/0/da"><img src="http://feedads.g.doubleclick.net/~a/w1T76ctb4VRcAZ9LBWu-xIe_Gow/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w1T76ctb4VRcAZ9LBWu-xIe_Gow/1/da"><img src="http://feedads.g.doubleclick.net/~a/w1T76ctb4VRcAZ9LBWu-xIe_Gow/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/doctype-v-html-dokumentax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://generaltea.ru/doctype-v-html-dokumentax/</feedburner:origLink></item>
		<item>
		<title>Основы HTML. Структура документа</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/8eWaDWDt0ss/</link>
		<comments>http://generaltea.ru/osnovy-html-struktura-dokumenta/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 15:00:15 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[Верстка, HTML, CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[веб-сайт]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=502</guid>
		<description><![CDATA[Познакомившись с тегами и атрибутами языка HTML, можно приступать к более углубленному изучению HTML. Начать можно с изучения структуры документа HTML. Стандартный документ (страница) HTML, должен иметь определенную структуру, которая определена стандартами консорциума w3c. Посмотрим, на что же похожа эта структура, или как ее можно представить в удобопонимаемом виде. Я бы нарисовал ее в виде [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-html-struktura-dokumenta%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fosnovy-html-struktura-dokumenta%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">Познакомившись с <a href='http://generaltea.ru/osnovy-html-tags-attributes/'>тегами и атрибутами языка HTML</a>, можно приступать к более углубленному изучению HTML. Начать можно с изучения <strong>структуры документа HTML</strong>.</p>
<p style="text-align: justify;"><img style="padding: 5px 7px 0 0; display: inline; float: left;" title="HTML code" src="http://generaltea.ru/wp-content/uploads/2010/10/html_code_thumb.jpg" border="0" alt="HTML code" width="244" height="175" align="left" />Стандартный документ (страница) HTML, должен иметь определенную структуру, которая определена стандартами консорциума <a href="http://www.w3.org/" target="_blank">w3c</a>. Посмотрим, на что же похожа эта структура, или как ее можно представить в удобопонимаемом виде. Я бы нарисовал ее в виде человечка, потому как, документ HTML, состоит из головы и тела, но вот ног и рук не имеет <img src='http://generaltea.ru/wp-content/plugins/smilies-themer/adiumicons/happy.png' alt=':).' class='wp-smiley' /> </p>
<p style="text-align: justify;">Итак, выглядит это примерно так:</p>
<pre class="brush: html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;!-- служебная информация располагается в голове –&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- описание самого документа, то есть его тело –&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">А теперь рассмотрим этот пример под микроскопом.</p>
<p><span id="more-502"></span></p>
<p style="text-align: justify;">Самой первой строчкой идет объявление типа документа, так называемый <strong><a href='http://generaltea.ru/doctype-v-html-dokumentax/'>DOCTYPE</a></strong>. Эта строка является очень важной, так как, она указывает браузеру, какую версию HTML движка, он должен использовать для рендеринга этого документа, в случае неправильного указания, некоторые элементы оформления могут “съезжать”.</p>
<p style="text-align: justify;">Далее идет тег <span class="code">&lt;html&gt;</span>, который является корневым элементом. С него начинается вся <strong>разметка HTML документа</strong>, этот тег является контейнером для всех остальных тегов.</p>
<p style="text-align: justify;">HTML документ, всегда, разбит на две части:</p>
<ul style="text-align: justify;">
<li>
<div>голову&nbsp;&mdash; тег <span class="code">&lt;head&gt;</span></div>
</li>
<li>
<div>тело – тег <span class="code">&lt;body&gt;</span></div>
</li>
</ul>
<p style="text-align: justify;">В секции <span class="code">head</span> размещается служебная информация, такая как:</p>
<ul style="text-align: justify;">
<li>
<div>заголовок страницы – тег <span class="code">&lt;title&gt;</span></div>
</li>
<li>
<div>ссылки на CSS файлы, и RSS потоки – &lt;link&gt;</div>
</li>
<li>
<div>также могут размещаться ссылки на скрипты, либо сами скрипты, но это не желательно, в целях повышения производительности, скрипты лучше выносить в самый низ документа, перед закрывающим тегом <span class="code">&lt;/body&gt;</span>.</div>
</li>
</ul>
<p style="text-align: justify;">В секции <span class="code">&lt;body&gt;</span> помещаются все теги, которые будут описывать структуру страницы:</p>
<ul style="text-align: justify;">
<li>блоки – <span class="code">&lt;div&gt;</span></li>
<li>праграфы – <span class="code">&lt;p&gt;</span></li>
<li>ссылки – <span class="code">&lt;a&gt;</span></li>
<li>списки – <span class="code">&lt;ul&gt;</span>, <span class="code">&lt;ol&gt;</span></li>
<li>картинки – <span class="code">&lt;img /&gt;</span></li>
<li>таблицы – <span class="code">&lt;table&gt;</span></li>
<li>и иные элементы разметки документа</li>
</ul>
<p style="text-align: justify;">Вот так вот простенько, выглядит <strong>структура HTML документа</strong>. В следующих постах, я более подробно расскажу, о каждом блоке этой структуры.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/h5-GHLw7YXG8QpXLbkPxn0vclWU/0/da"><img src="http://feedads.g.doubleclick.net/~a/h5-GHLw7YXG8QpXLbkPxn0vclWU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/h5-GHLw7YXG8QpXLbkPxn0vclWU/1/da"><img src="http://feedads.g.doubleclick.net/~a/h5-GHLw7YXG8QpXLbkPxn0vclWU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/osnovy-html-struktura-dokumenta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://generaltea.ru/osnovy-html-struktura-dokumenta/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC и проблема с ValidationSummary</title>
		<link>http://feedproxy.google.com/~r/generaltea/~3/H2YpHMwmAGc/</link>
		<comments>http://generaltea.ru/asp-net-mvc-i-problema-s-validationsummary/#comments</comments>
		<pubDate>Thu, 13 May 2010 14:01:09 +0000</pubDate>
		<dc:creator>msi</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://generaltea.ru/?p=429</guid>
		<description><![CDATA[При использовании фреймворка ASP.NET MVC, есть возможность использования серверной и клиентской валидации при помощи атрибутов из пространства имен DataAnnotations. Для отображения ошибок полей ввода, можно воспользоваться расширениями для отображения сообщений об ошибках, входящими в фреймворк ASP.NET MVC: Html.ValidationMessage Html.ValidationMessageFor Html.ValidationSummary Расширения Html.ValidationMessage и Html.ValidationMessageFor, предназначены для отображения ошибок ввода для конкретного поля, а Html.ValidationSummary&#160;&#8212; отображает [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgeneraltea.ru%2Fasp-net-mvc-i-problema-s-validationsummary%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgeneraltea.ru%2Fasp-net-mvc-i-problema-s-validationsummary%2F&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">При использовании <strong><a href="http://www.asp.net/mvc">фреймворка ASP.NET MVC</a></strong>, есть возможность использования серверной и клиентской валидации при помощи атрибутов из пространства<br />
имен <span class="code">DataAnnotations</span>.</p>
<p style="text-align: justify;">Для отображения ошибок полей ввода, можно воспользоваться расширениями для отображения сообщений об ошибках, входящими в фреймворк ASP.NET MVC:</p>
<pre class="brush: csharp">Html.ValidationMessage
Html.ValidationMessageFor
Html.ValidationSummary
</pre>
<p style="text-align: justify;">Расширения <span class="code">Html.ValidationMessage</span> и <span class="code">Html.ValidationMessageFor</span>, предназначены для отображения ошибок ввода для конкретного поля, а <span class="code">Html.ValidationSummary</span>&nbsp;&mdash; отображает все ошибки, как относящиеся к полям, так и добавленные в словарь <span class="code">ModelState</span> вручную из контроллера.</p>
<p style="text-align: justify;">У расширения <span class="code">Html.ValidationSummary</span> имеется булевый атрибут, который управляет отображением ошибок, при значении <span class="code">true</span> будут исключены ошибки полей и отображены только ошибки модели, а при значении <span class="code">false</span> (оно включено по умолчанию) будут показаны и ошибки полей и ошибки модели.</p>
<p><span id="more-429"></span></p>
<p style="text-align: justify;">При использовании нижеприведенного кода для своего приложения, я столкнулся с одной странностью. При возникновении исключения в строке:</p>
<pre class="brush: csharp">MembersManager.RegisterMember(member);
</pre>
<p style="text-align: justify;">в секции <span class="code">catch</span> добавляется ошибка в словарь <span class="code">ModelState</span>, следующим образом:</p>
<pre class="brush: csharp">ModelState.AddModelError("error", ex.Message);
</pre>
<p style="text-align: justify;">и возвращается представление (View), в котором будет содержаться ошибка модели, которую хотелось бы отобразить в <strong><span class="code">ValidationSummary</span></strong>. То есть, мне хотелось вывести только эту ошибку исключив отображение ошибок полей.</p>
<p style="text-align: justify;">Как описано на <a href="http://msdn.microsoft.com/en-us/library/ee839469.aspx">сайте MSDN</a>, для этого необходимо передать для  <span class="code">ValidationSummary</span>, в качестве параметра значение <span class="code">true</span>. Но при использовании следующего кода в <span class="code">ValidationSummary</span> не выводится совсем никаких ошибок:</p>
<p><em><strong>Модель (Model):</strong></em></p>
<pre class="brush: csharp">public class Member
{
    [Required(ErrorMessage = "*")]
    [DisplayName("Login:")]
    public string Login { get; set; }

    [Required(ErrorMessage = "*")]
    [DataType(DataType.Password)]
    [DisplayName("Password:")]
    public string Password { get; set; }
    [Required(ErrorMessage = "*")]
    [DataType(DataType.Password)]
    [DisplayName("Confirm Password:")]
    public string ConfirmPassword { get; set; }
}
</pre>
<p><em><strong>Контроллер (Controller):</strong></em></p>
<pre class="brush: csharp">[HttpPost]
public ActionResult Register(Member member)
{
    try
    {
        if (!ModelState.IsValid)
            return View();

        MembersManager.RegisterMember(member);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("error", ex.Message);
        return View(member);
    }
}
</pre>
<p><em><strong>Представление (View):</strong></em></p>
<pre class="brush: html">&lt;% using (Html.BeginForm("Register", "Members", FormMethod.Post, new { enctype = "multipart/form-data" })) {%&gt;

    &lt;p&gt;
        &lt;%= Html.LabelFor(model =&gt; model.Login)%&gt;
        &lt;%= Html.TextBoxFor(model =&gt; model.Login)%&gt;
        &lt;%= Html.ValidationMessageFor(model =&gt; model.Login)%&gt;
    &lt;/p&gt;

    &lt;p&gt;
        &lt;%= Html.LabelFor(model =&gt; model.Password)%&gt;
        &lt;%= Html.PasswordFor(model =&gt; model.Password)%&gt;
        &lt;%= Html.ValidationMessageFor(model =&gt; model.Password)%&gt;
    &lt;/p&gt;

    &lt;p&gt;
        &lt;%= Html.LabelFor(model =&gt; model.ConfirmPassword)%&gt;
        &lt;%= Html.PasswordFor(model =&gt; model.ConfirmPassword)%&gt;
        &lt;%= Html.ValidationMessageFor(model =&gt; model.ConfirmPassword)%&gt;
    &lt;/p&gt;

    &lt;div&gt;
        &lt;input type="submit" value="Create" /&gt;
    &lt;/div&gt;

    &lt;%= Html.ValidationSummary(true)%&gt;
&lt;% } %&gt;
</pre>
<p style="text-align: justify;">После длительного поиска на просторах интернет и изучения исходных кодов фреймворка <strong>ASP.NET MVC</strong>, было найдено решение, которое оказалось до жути банальным.</p>
<p style="text-align: justify;">Как выяснилось <strong><span class="code">ValidationSummary</span></strong>, ищет ошибки модели, которые привязаны к полям (в качестве ключа словаря <span class="code">ModelState</span> передаются имена полей). Поэтому достаточно было в качестве ключа, при добавлении ошибки в <span class="code">ModelState</span>, передать пустую строку</p>
<pre class="brush: csharp">ModelState.AddModelError(String.Empty, ex.Message);
</pre>
<p style="text-align: justify;">и все стало работать именно так, как и задумывалось <img src='http://generaltea.ru/wp-content/plugins/smilies-themer/adiumicons/happy.png' alt=':).' class='wp-smiley' /> </p>
<p style="text-align: justify;">P.S. При использовании классов <strong>LINQ To SQL</strong>, может возникнуть необходимость пробежаться по набору <a href="http://www.techweek.ru/entityset-and-foreach/" target="_blank">EntitySet при помощи цикла foreach</a>, но тут может возникнуть ошибка приведения типов. По ссылке можно увидеть решение данной проблемы.</p>
<hr />
<p>
А вы знаете <a href="http://x-zarabotok.ru/">как заработать деньги в интернете</a>&nbsp;&mdash; заходите, расскажем.</p>
<hr />

<p><a href="http://feedads.g.doubleclick.net/~a/Vu77fKRyFTBU4m6rfKXHLrKV_uU/0/da"><img src="http://feedads.g.doubleclick.net/~a/Vu77fKRyFTBU4m6rfKXHLrKV_uU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Vu77fKRyFTBU4m6rfKXHLrKV_uU/1/da"><img src="http://feedads.g.doubleclick.net/~a/Vu77fKRyFTBU4m6rfKXHLrKV_uU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://generaltea.ru/asp-net-mvc-i-problema-s-validationsummary/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://generaltea.ru/asp-net-mvc-i-problema-s-validationsummary/</feedburner:origLink></item>
	</channel>
</rss>

