<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki.apidesign.org/skins/common/feed.css?116"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=Abstract_class</id>
		<title>Abstract class - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=Abstract_class"/>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Abstract_class&amp;action=history"/>
		<updated>2026-05-04T07:31:31Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.12.0rc1</generator>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=7576&amp;oldid=prev</id>
		<title>JaroslavTulach at 14:19, 28 April 2014</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=7576&amp;oldid=prev"/>
				<updated>2014-04-28T14:19:23Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 14:19, 28 April 2014&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Anti]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Anti]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:APIDesignPatterns]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=5761&amp;oldid=prev</id>
		<title>JaroslavTulach at 19:39, 12 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=5761&amp;oldid=prev"/>
				<updated>2012-05-12T19:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:39, 12 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An [[Abstract class]] in an [[API]] is suspicious. Often it just shows the [[API]] designer was not sure whether the goal is to create a [[ClientAPI]] or [[ProviderAPI]]. In case the [[ClarityOfAccessModifiers]] is not obeyed, one can get into significant troubles as illustrated on the [[AlternativeBehaviour|factorial example]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An [[Abstract class]] in an [[API]] is suspicious. Often it just shows the [[API]] designer was not sure whether the goal is to create a [[ClientAPI]] or [[ProviderAPI]]. In case the [[ClarityOfAccessModifiers]] is not obeyed, one can get into significant troubles as illustrated on the [[AlternativeBehaviour|factorial example]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Extending existing [[abstract class]] with new methods is not 100% [[BackwardCompatibility|compatible]] either. Binary compatibility is usually OK, but by adding new method one can break the source compatibility (method with the same name and signature could exist and be '''private''' in some subclass). One can also compromise the functional compatibility (method with same signature and name exists and is '''public''' - in such case it gets called in unpredictable moments).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Not all usages of [[abstract class]]es are bad. For example the [[ImplementOnlyAbstractClass]] benefits from richer set of access modifiers one can use in [[abstract class]]es than in [[ImplementOnlyInterface]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Not all usages of [[abstract class]]es are bad. For example the [[ImplementOnlyAbstractClass]] benefits from richer set of access modifiers one can use in [[abstract class]]es than in [[ImplementOnlyInterface]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=5759&amp;oldid=prev</id>
		<title>JaroslavTulach: New page: An Abstract class in an API is suspicious. Often it just shows the API designer was not sure whether the goal is to create a ClientAPI or ProviderAPI. In case the [[Cla...</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Abstract_class&amp;diff=5759&amp;oldid=prev"/>
				<updated>2012-05-12T19:35:52Z</updated>
		
		<summary type="html">&lt;p&gt;New page: An &lt;a href=&quot;/wiki/Abstract_class&quot; title=&quot;Abstract class&quot;&gt;Abstract class&lt;/a&gt; in an &lt;a href=&quot;/wiki/API&quot; class=&quot;mw-redirect&quot; title=&quot;API&quot;&gt;API&lt;/a&gt; is suspicious. Often it just shows the &lt;a href=&quot;/wiki/API&quot; class=&quot;mw-redirect&quot; title=&quot;API&quot;&gt;API&lt;/a&gt; designer was not sure whether the goal is to create a &lt;a href=&quot;/wiki/ClientAPI&quot; title=&quot;ClientAPI&quot;&gt;ClientAPI&lt;/a&gt; or &lt;a href=&quot;/wiki/ProviderAPI&quot; title=&quot;ProviderAPI&quot;&gt;ProviderAPI&lt;/a&gt;. In case the [[Cla...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;An [[Abstract class]] in an [[API]] is suspicious. Often it just shows the [[API]] designer was not sure whether the goal is to create a [[ClientAPI]] or [[ProviderAPI]]. In case the [[ClarityOfAccessModifiers]] is not obeyed, one can get into significant troubles as illustrated on the [[AlternativeBehaviour|factorial example]].&lt;br /&gt;
&lt;br /&gt;
Not all usages of [[abstract class]]es are bad. For example the [[ImplementOnlyAbstractClass]] benefits from richer set of access modifiers one can use in [[abstract class]]es than in [[ImplementOnlyInterface]].&lt;br /&gt;
&lt;br /&gt;
Also one can keep [[ClarityOfAccessModifiers]] even in [[abstract class]]es as for example {{JDK|java/nio/charset|CharsetEncoder}} shows by having all [[ClientAPI]] methods '''public final''' and all the others ''protected''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Still, in the name of [[ClarityOfTypes|clarity]], consider separating [[APIvsSPI]] into separate types.&lt;br /&gt;
&lt;br /&gt;
[[Category:APIDesignPatterns:Anti]]&lt;/div&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	</feed>