tag:blogger.com,1999:blog-74111500208252763652024-03-19T04:48:29.228-07:00Captain Morgan on Software EngineeringA blog about Software Engineering.Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-7411150020825276365.post-39821291010800131412020-04-10T08:04:00.000-07:002020-04-10T08:12:14.452-07:00Unix Line Endings in Visual Studio<div style="text-align: justify;">
In the current world of cross-platform .NET Core development you might want to use Unix-style line endings in your code-base. Visual Studio uses Windows-style by default. In this article I'm going to explain how to change that.</div>
<br />
<div style="text-align: justify;">
On Windows machines ends of lines are encoded using a pair of characters <span style="font-family: "courier new" , "courier" , monospace;">'\r\n'</span> (also known as <span style="font-family: "courier new" , "courier" , monospace;">CRLF</span>, which is a shortcut for carriage return + line feed and resembles old typewriters). On Unix a single character <span style="font-family: "courier new" , "courier" , monospace;">'\n'</span> (or <span style="font-family: "courier new" , "courier" , monospace;">LF</span>) is used.</div>
<div style="text-align: justify;">
<br />
In Visual Studio 2019 you can switch line endings at the bottom of the editor window, as depicted on the following screenshot. This is tracked for each file separately and gets reset with every file modification, which is not very convenient.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="" height="303" src="data:image/png;base64,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" width="400" /></div>
<h2>
Editor Config</h2>
It's better to specify line endings globally for the whole solution, which can be done using Editor Config. To set it up follow these simple steps. If you already have an .editorconfig file in your solution, you can skip steps 1 - 4.<br />
<br />
1. Right click on your solution in <i>Solution Explorer</i>.<br />
2. Select <i>Add</i> > <i>New Item</i>.<br />
3. Choose <i>editorconfig File (default)</i>.<br />
4. Click <i>Add.</i><br />
<br />
<div style="text-align: justify;">
This will create a new file named <span style="font-family: "courier new" , "courier" , monospace;">.editorconfig</span> in your solution folder, which gets automatically opened in your Visual Studio editor window.</div>
<br />
<div style="text-align: center;">
<img alt="" height="200" src="data:image/png;base64,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" width="168" /></div>
<br />
5. Replace the file contents with the following and save.<br />
<br />
<pre style="margin-bottom: 0px;">[*]
end_of_line = "lf"</pre>
<br />
<div style="text-align: justify;">
From now on, Visual Studio will use Unix line endings for all files in your solution. Note however, that existing files will not get automatically converted.</div>
<br />
For more information visit Editor Config documentation at<br />
<a href="https://docs.microsoft.com/en-us/visualstudio/ide/create-portable-custom-editor-options?view=vs-2019">https://docs.microsoft.com/en-us/visualstudio/ide/create-portable-custom-editor-options?view=vs-2019</a><br />
<br />Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.com0tag:blogger.com,1999:blog-7411150020825276365.post-62564105337049903272020-04-04T01:34:00.000-07:002020-04-04T01:34:13.068-07:00Null-Conditional Operator is Short Circuiting in C#<div style="text-align: justify;">
In C#, similar to boolean operators, the null-conditional operator (<span style="font-family: "Courier New", Courier, monospace;">?.</span>) is short circuiting. This allows us to simplify longer chains of member access operations. In this article I will explain what that means.</div>
<h2>
Documentation</h2>
According to documentation:<br />
<br />
<blockquote class="tr_bq">
The null-conditional operators are short-circuiting. That is, if one operation in a chain of conditional member or element access operations returns null, the rest of the chain doesn't execute.</blockquote>
See:<br />
<a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators">https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators</a><br />
<h2>
Example</h2>
<div style="text-align: justify;">
Let me illustrate this with a (contrived) example. Say we have a page in a document which might or might not have a header. A header has a couple of properties, such as text, padding, etc.</div>
<br />
We can represent this scenario using the following classes:<br />
<br />
<pre style="margin-bottom: 0px;">class Page
{
// nullable
public Header Header { get; set; }
}
class Header
{
public int Padding { get; set; }
public string Text { get; set; }
}
</pre>
<br />
<div style="text-align: justify;">
Suppose we want to calculate the length of header text. Since the Header property can be null, we need to use the null-conditional operator when accessing the Text member.</div>
<br />
<pre style="margin-bottom: 0px;">var length = page.Header?.Text.Length ?? 0;
</pre>
<br />
<div style="text-align: justify;">
If you are like me, you thing about the <span style="font-family: "Courier New", Courier, monospace;">?.</span> operator as if it works in the following manner.</div>
<br />
<pre style="margin-bottom: 0px;">x?.y <=> x == null ? null : x.y
</pre>
<br />
There is one catch, though. If we follow this evaluation rule in our example<br />
<br />
<pre style="margin-bottom: 0px;">page.Header?.Text => null
</pre>
<br />
we should expect NullReferenceException on the next member access.<br />
<br />
<pre style="margin-bottom: 0px;">null.Length
</pre>
<br />
<div style="text-align: justify;">
This is where the short circuiting property comes useful. When the <span style="font-family: "Courier New", Courier, monospace;">?.</span> operator evaluates to null, the rest of the expression is skipped and the whole expression evaluates null.</div>
<br />
<pre style="margin-bottom: 0px;">page.Header?.Text.Length => null</pre>
<br />
<div style="text-align: justify;">
No need to protect the next member access with another null-conditional operator.
</div>
Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.com0tag:blogger.com,1999:blog-7411150020825276365.post-21212049489774007662019-06-10T22:15:00.000-07:002019-06-10T22:15:47.252-07:00Cancellation in .NET<div style="text-align: justify;">
.NET 4.0 introduced support for cancelling asynchronous operations using CancellationToken. It is a cooperative pattern, where one operation has a means to trigger cancellation of another operation by sending a cancellation request to it. In order for this to work, the receiver must listen for such requests and react appropriately. In other words, an operation can only be cancelled when the code is written with cancellation support in mind.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
This article will explain how to properly implement this pattern. </div>
<h2>
CancellationTokenSource</h2>
There are the following two sides of cancellation:<br />
<br />
<b>CancellationTokenSource</b><br />
Allows the sender to trigger cancellation.<br />
<br />
<b>CancellationToken</b><br />
Allows the receiver to receive cancellation request.<br />
<br />
In general the approach works as follows: <br />
<br />
<pre>// the sender:
{
// the sender operation creates a source ...
var cts = new CancellationTokenSource();
// ... and links it to a token
var token = cts.Token;
// the token is pased to the receiver
var task = LongRunningOperation(token);
...
// at some later point in time
// the source is used to issue a cancellation request
cts.Cancel();
}</pre>
<pre>// the receiver:
async Task LongRunningOperation(
CancellationToken token = default(CancellationToken))
{
while (...)
{
// the receiver periodically checks for cancellation request
// when triggered, the operation is cancelled
// by throwing OperationCanceledException
token.ThrowIfCancellationRequested();
// do work
...
}
}</pre>
<h2>
An Example</h2>
<div style="text-align: justify;">
Let me now illustrate this concept with an example. We will use a simple Windows Forms application, because it allows a straightforward demonstration of the concept, although the approach is universally applicable and can be used with any asynchronous code.<br />
<br />
Our application allows to calculate highest prime number lower than a given max value. It contains an input field and two buttons - the Calculate button to start the calculation and the Cancel button to cancel it. <br />
<br /></div>
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,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sHo+864cM3LkSNzd3fno89XM8Akm3RnM5s3B+PiayCyt4HBxLgWJAayfN4op4+pu053PV4Wy03GAsiPVFKcEEbN2KmNHDmPw4Il89NEcli1bzoIFm/H2DiYjI5itW4PxXhlLRnE5+1JjsaxdyPxRIxg3eDAffvgh7u7ujPvcl+krwrAfisK7S+cAABCOSURBVCd+1yL8po5l1PClrAhMxnHkMJWFNkzbFuExdTAfDh/M4AkzmbBsB5sdJWQevrMQKUgiBqe/D+ne0t+HZHwKkohBKUgKUlujIIkYlIKkILU1CpKIQSlIClJboyCJGJSCpCC1NQqSiEEpSApSW6MgiRiUgqQgtTUKkohBKUgKUlujIIkYVF2QnE4n2dnZcpecTid2u73ZQUpISGDfvn0UFhZKC8nJycFkMilIIkZTXV1NWlqa3GPNCVJOTg5RUVHSSg4cONDqf/5cLgVJ5KqzZ89y9OhRucfOnj3b5Nf++PHjVFRUSCs5depUq//5c7kUJBERMQgFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBEhERQ1CQRETEEBQkERExBAVJREQMQUESERFDUJBERMQQFCQRETEEBUlERAxBQRIREUNQkERExBAUJBERMQQFSUREDEFBklZ14cIF0tLS2Lt3r4gYRFJSEqdOnWrx5wMFSVrV2bNn2b59O15eXmzdulVEWtny5cvx8/Ojurq6xZ8PFCRpVXVBCgsL47vvvhORVmY2mxUkaZvqgrR37140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" /></div>
<br />
<div style="text-align: justify;">
Efficient algorithms exist for this problem, however I have chosen a
naive quadratic iteration so that the cancellation code stands out.</div>
<br />
The application contains a single Form class:<br />
<br />
<pre>public partial class Form1 : Form
{
CancellationTokenSource cts;
...
</pre>
<div style="text-align: justify;">
There is a CancellationTokenSource stored as a class field. This is needed so that we can
share it between the two button clicked handlers (see below).
</div>
<br />
<pre> ...
private long FindLargestPrimeNumber(
long max, CancellationToken token = default(CancellationToken))
{
var result = 1;
for (int i = 2; i <= max; i++)
{
token.ThrowIfCancellationRequested();
if (IsPrime(i, token))
{
result = i;
}
}
return result;
}
private bool IsPrime(
int num, CancellationToken token = default(CancellationToken))
{
for (int i = 2; i < num; i++)
{
token.ThrowIfCancellationRequested();
if (num % i == 0)
{
return false;
}
}
return true;
}
...
</pre>
<div style="text-align: justify;">
These two methods implement the computation algorithm. Note how the token
is used for periodic cancellation checks.</div>
<br />
<div style="text-align: justify;">
Also note how the token is propagated through the whole call chain. This is a common practice
as in general code which doesn't accept a cancellation token is impossible to cancel.</div>
<div style="text-align: justify;">
<br /></div>
<pre> ...
private void calculateBtn_Click(object sender, EventArgs e)
{
cts = new CancellationTokenSource();
var token = cts.Token;
Task.Run(() =>
{
long max = -1;
this.Invoke((Action)(() =>
{
largestPrimeTxt.Clear();
calculateBtn.Enabled = false;
cancelBtn.Enabled = true;
calculatingLbl.Visible = true;
max = long.Parse(this.maxValueTxt.Text);
}));
long prime = -1;
try
{
prime = FindLargestPrimeNumber(max, token);
}
catch (OperationCanceledException)
{ }
this.Invoke((Action) (() =>
{
calculateBtn.Enabled = true;
cancelBtn.Enabled = false;
calculatingLbl.Visible = false;
if (prime != -1)
{
largestPrimeTxt.Text = prime.ToString();
}
}));
cts.Dispose();
}, token);
}
...
</pre>
<div style="text-align: justify;">
This is the handler to start the computation. Note how a new CancellationTokenSource is created and CancellationToken retrieved. The token is then accessed in the asynchronously executed lambda function.<br />
<br />
As explained above, upon cancellation an OperationCanceledException gets thrown deep within the computation algorithm, which then propagates all the way up the call stack. Note the catch block which interrupts the propagation and allows us to make sure the UI gets properly updated.<br />
<br />
Since CancellationTokenSource is IDisposable, the Dispose call on the bottom is necessary so that allocated OS resources get freed up. </div>
<br />
<pre> ...
private void cancelBtn_Click(object sender, EventArgs e)
{
cts.Cancel();
}
}
</pre>
The last piece is the handler to cancel the computation.<br />
<br />
<h2>
Linked Tokens and Timeouts</h2>
<div style="text-align: justify;">
In addition to cancellations triggered by user actions, it is also possible to set up automatic cancellations based on timeouts. Since .NET 4.5 there is a convenient way to express this.</div>
<br />
The timeout can be passed into the CancellationTokenSource constructor:<br />
<br />
<pre>// create a token which will automatically get cancelled
// after a given time
var timespan = ...;
var cts = new CancellationTokenSource(timespan);
var token = cts.Token;
</pre>
For existing sources, a timeout can be set through the CancelAfter method:<br />
<br />
<pre>// set up cancellation for an existing token after a given time
var cts = new CancellationTokenSource();
var token = cts.Token;
var timespan = ...;
cts.CancelAfter(timespan);
</pre>
<div style="text-align: justify;">
It is also possible to combine multiple sources of cancellation together. .NET allows to link a CancellationTokenSource to one or multiple existing cancellation tokens. The resulting token is cancelled when any of the linked sources is cancelled.</div>
<br />
<pre>var token = ...; // original cancellation token
using (var cts =
CancellationTokenSource.CreateLinkedTokenSource(token))
{
var combinedToken = cts.Token;
...
}
</pre>
<h2>
An Example</h2>
<div style="text-align: justify;">
We can use these features to modify the prime number calculation to get automatically cancelled when it isn't finished in 30 seconds. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In this case it's only needed to specify the timeout in CancellationTokenSource constructor:
<br />
<br />
<pre>cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));</pre>
</div>
<h2>
Sample Code</h2>
You can download the full sample code from <a href="https://github.com/dusan-rychnovsky/prime-number-calculator" target="_blank">prime number calculator</a> at GitHub.<br />
<h2>
Conclusion</h2>
In this article I have shown you how to properly implement cancellation in .NET, including timeouts and linked tokens.Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.com0tag:blogger.com,1999:blog-7411150020825276365.post-40714940563019884222016-12-29T09:25:00.001-08:002018-09-30T01:15:49.902-07:00Binary Heap - Top N ElementsSuppose we have a very large collection of items and need to select the first N, according to some criterion. In this article I will show you an efficient algorithm based on the heap data-structure and explain how to implement it using standard Java features.<br />
<h2>
An Example</h2>
As an example, suppose we created a very popular on-line game, such as Tetris. Over the few months since the game was published we've gathered a list of achieved scores with the following structure:<br />
<br />
<table>
<tbody>
<tr>
<th>ID</th>
<th>PLAYER</th>
<th>DATE</th>
<th>SCORE</th>
</tr>
<tr>
<td>1</td>
<td>Jose Rodriguez</td>
<td>2016/10/01 14:55:02</td>
<td>154</td>
</tr>
<tr>
<td>2</td>
<td>Nefart</td>
<td>2016/12/15 03:12:21</td>
<td>12</td>
</tr>
<tr>
<td>3</td>
<td>SUF4N</td>
<td>2016/06/03 22:00:01</td>
<td>10280</td>
</tr>
<tr>
<td>4</td>
<td>EtnaVolcano</td>
<td>2016/12/24 18:56:15</td>
<td>1342</td>
</tr>
<tr>
<td>5</td>
<td>Guido</td>
<td>2016/09/09 07:15:00</td>
<td>280</td>
</tr>
<tr>
<td colspan="4" style="text-align: center;">...</td>
</tr>
</tbody></table>
Now we'd like to find the highest 10 achieved scores.<br />
<br />
As our game has become quite popular, this list is very long. Let's say we've gathered a few millions of records. <br />
<h2>
Binary Heap</h2>
This is a task most suited for a heap data-structure. There are many variants of heap, of which the most basic and commonly known is <b>binary</b> (or 2-regular) <b>heap</b>.<br />
<br />
According to <a href="https://en.wikipedia.org/wiki/Binary_heap">Wikipedia</a>:<br />
<br />
<blockquote class="tr_bq">
<b>Binary heap</b> is a <b>complete binary tree</b> which satisfies the <b>heap property</b> - the key stored in each node is greater than or equal to the keys in the node's children, according to some total order function.<br />
<br />
A <b>complete binary tree</b> is, put informally, a binary tree for which every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible.</blockquote>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihz7WicllZ3Ry02rkYymyg-kdoWEHOrxr-dJd8LJo2lwe8aQ6OBME41NzBzyP5RQsbsPTsrjijD6ckpN3q8SwNNWKm61HoH-F_a9IRnq8vS-4UhqnWdvuFAMbXZC3WFCf3VHcbyMlq_K4/s1600/binary-heap.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihz7WicllZ3Ry02rkYymyg-kdoWEHOrxr-dJd8LJo2lwe8aQ6OBME41NzBzyP5RQsbsPTsrjijD6ckpN3q8SwNNWKm61HoH-F_a9IRnq8vS-4UhqnWdvuFAMbXZC3WFCf3VHcbyMlq_K4/s400/binary-heap.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">An Example Binary Heap</td></tr>
</tbody></table>
<br />
From the heap property follows an important observation - the greatest element is always located in the root of the tree. Also, given heap is a complete binary tree, it has logarithmic height. Therefore the following convenient time complexities:<br />
<br />
<ol style="list-style: square outside;">
<li><b>Insert</b> O(log(N))</li>
<li><b>FindMax</b> O(1)</li>
<li><b>DeleteMax</b> O(log(N))</li>
</ol>
<br />
You can find a more detailed explanation and implementation details on the Internet. <br />
<h2>
Min vs. Max Heap</h2>
The above description holds for a so-called <b>max-heap</b>. Additionally, there also is<br />
a <b>min-heap</b>, where the heap property is inverted and root node contains the minimum element.<br />
<br />
It is useful to observe that a min-heap is just a max-heap with inverted ordering <br />
function. Specifically:<br />
<br />
<pre>x <fmax y <=> x >fmin y
</pre>
Therefore the distinction between max-heap and min-heap lies purely in what ordering function it takes. It is, however, a useful abstraction that simplifies communication and reasoning about heap behaviour.<br />
<h2>
The Algorithm</h2>
So how can we use a heap to solve the problem at hand? <br />
<br />
<pre><b>Input:</b>
A sequence of M elements, an appropriate ordering function and
a positive number N. Supposing M >> N.
<b>Steps:</b>
1. Build a min-heap of size N by inserting the first N elements.
2. For each remaining element:
a) Insert the element.
b) Delete the current minimum.
3. While heap is non-empty:
a) Find and collect minimum.
b) Delete minimum.
4. Return collected elements, in reversed order.
<b>Output:</b>
A sequence of top N elements of the input sequence.
</pre>
A key observation here is that after i-th iteration in Step 2 the heap will contain<br />
the top N elements of the N+i-th prefix of the input sequence. Therefore, at the end of step 2, after all items have been processed, it will contain the top N elements of the whole sequence.<br />
<br />
Note that we've used a min-heap, even though we're interested in the N largest
elements. This is an important trick that allows us to easily drop the smallest
of the current N+1 largest elements in step 2b. Conversely, at the end in Step 4, we need to
reverse the order of output, because the heap will give out the N largest elements sorted from the smallest.<br />
<h2>
Time And Space Complexity</h2>
The total <b>time complexity</b> of the algorithm is <b>O(M log(N))</b>, where M is the size of the input sequence and N is the size of the output sequence. Note that M >> N and so this bound is much better than for e.g. sorting the whole input sequence. Often N is very small, such as 10. In that case the time complexity is essentially <b>O(M)</b>.<br />
<br />
The heap can be implemented using an underlying array of size N. Therefore the space complexity of this algorithm is <b>O(N)</b>, which is also very good.<br />
<h2>
PriorityQueue</h2>
Now that the algorithm is clear, let's look at how we can implement it in Java. The standard library provides a binary heap implementation under a class named <b>PriorityQueue</b>.<br />
<br />
It has the following interface:<br />
<br />
<pre><b>public PriorityQueue(int initialCapacity, Comparator<E> comparator)</b>
Constructor.
The initialCapacity determines the initial size of the underlying
array. This is just a technical detail. PriorityQueue is an
unbounded queue and the array will grow as needed.
The comparator implements the ordering function. PriorityQueue is
a min-heap - root note will contain the record which the comparator
deems smallest. If you need a max-heap, just give it a reversed
comparator
(see java.util.Collections#reverseOrder(Comparator<T> cmp)).
</pre>
<pre><b>public boolean add(E element)</b>
Insert.
</pre>
<pre><b>public int size()</b>
Size
</pre>
<pre><b>public E poll()</b>
Retrieve and delete min.
</pre>
<h2>
The Implementation</h2>
Using PriorityQueue the algorithm can be expressed in a straight-forward way.<br />
<br />
<pre>public class TopN {
public static <T> List<T> getTopN(Stream<T> entries, Comparator<T> comparator, int count) {
PriorityQueue<T> queue = new PriorityQueue<>(count + 1, comparator);
entries.forEach(entry -> {
queue.add(entry);
if (queue.size() > count) {
queue.poll();
}
});
List<T> result = new ArrayList<>(queue.size());
while (!queue.isEmpty()) {
result.add(queue.poll());
}
Collections.reverse(result);
return result;
}
}
</pre>
<h2>
Back to our Example</h2>
Now that we have the algorithm implemented we just need to provide the representation of a record and the ordering function for our specific use-case.<br />
<br />
<pre>@Value
public class Score {
int id;
String player;
Date date;
int score;
}
</pre>
The @Value annotation comes from <a href="https://projectlombok.org/">Project Lombok</a> and denotes a value-object. It is just some syntactic sugar that allows to make our class definitions clearer. The compiler will augment the AST - make all those fields private and final, generate a corresponding getter for each of them plus an all-arguments constructor.<br />
<br />
The comparator will look as follows:<br />
<br />
<pre>public class ScoreComparator implements Comparator<score> {
@Override
public int compare(Score first, Score second) {
return Integer.compare(first.getScore(), second.getScore());
}
}
</score></pre>
With all the pieces in place we can now use them this way:<br />
<br />
<pre>Stream<Score> scores = ...; // obtain a stream of all scores
List<Score> top10 = TopN.getTopN(scores, new ScoreComparator(), 10);
</pre>
This will give us the 10 greatest scores achieved in our game.<br />
<h2>
Conclusion</h2>
In this article we've seen a brief overview of the heap data-structure and demonstrated, based on a use-case, one type of applications it is very useful for.<br />
<br />
You can find the complete code on GitHub under <a href="https://github.com/dusan-rychnovsky/top-n">dusan-rychnovsky/top-n</a>.Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.com0tag:blogger.com,1999:blog-7411150020825276365.post-34540196133543874822015-02-21T09:52:00.001-08:002015-02-22T05:38:02.941-08:00A Proper Visitor Implementation<div style="text-align: justify;">
As you probably know, Visitor is a design pattern originally defined by Gamma, Helm, Johnson and Vlissides in their book called <a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Professional-Computing/dp/0201634988" rel="nofollow" target="_blank">Design Patterns - Elements of Reusable Object-Oriented Software</a>. There, the intent of this pattern was described as:<br />
<br /></div>
<blockquote class="tr_bq" style="text-align: justify;">
<i>Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.</i></blockquote>
<div style="text-align: justify;">
Today, the Internet is flooded with web pages describing individual patterns, including Visitor. However, these pages only include trivial examples, which provide little help when implementing Visitor in a real-world application. Unfortunately, the Design Patterns book does not include any more advanced examples either.</div>
<h2>
The Problem</h2>
<div style="text-align: justify;">
In my experience, a typical usage of this pattern is as follows: You've got a tree-like data structure on which you need to implement multiple different operations. For example:</div>
<ol style="list-style: square outside; margin-top: 15px;">
<li>calculate certain properties (tree depth, average number of child nodes, etc),</li>
<li>convert the tree to a different format (serialize it to a string, etc),</li>
<li>etc.</li>
</ol>
<div style="text-align: justify;">
Because a tree is inherently a recursive data structure, it is a good idea to follow the Divide and conquer principle when implementing these operations - to assemble the result for a given node based on the results for it's child nodes. This is where the simple implementations fall short.</div>
<h2>
A Solution</h2>
<div style="text-align: justify;">
In this article I'd like to present a slightly modified implementation that supports easy and efficient access to sub-results.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As an example, suppose that we need to store and evaluate boolean expressions. A boolean expression can be represented as a tree-like structure, with atomic propositions as leaf nodes and boolean operations as intermediary nodes. The evaluation of such an expression is a great case for Visitor.</div>
<br />
<div style="text-align: justify;">
To represent such functions, we'll need to build a hierarchy consisting of the following classes:</div>
<ol style="list-style: square outside; margin-top: 15px;">
<li>Expression - a generic boolean expression,</li>
<li>Atom - an atomic proposition,</li>
<li>Negation - a negation of an expression,</li>
<li>Conjunction - a conjunction of two expression,</li>
<li>Disjunction - a disjunction of two expression.</li>
</ol>
<div style="text-align: justify;">
Let's first focus on the Visitor implementation. The following is a generic Visitor interface. For every operation (such as evaluating an expression), we'll create a separate implementation.</div>
<br />
<pre style="margin-bottom: 0px;">public interface Visitor<T> {
public T visit(Atom atom);
public T visit(Negation neg);
public T visit(Conjunction con);
public T visit(Disjunction dis);
}
</pre>
<br />
<div style="text-align: justify;">
It is important to note that this interface is parametrized - here T stands for the type of result of the represented operation. Every method accepts an expression of some kind as an argument and returns the result of applying the represented operation on that expression. This allows us to implement these methods using recursive calls according to the expression structure, as we'll see below. This is where this approach differs from those presented in existing articles.<br />
<br />
In our case, T is going to be Boolean, as evaluating a boolean expression results into a single boolean value. For other operations this could be different.</div>
<br />
Let's now take a look at the implementation.<br />
<br />
<pre style="margin-bottom: 0px;">public class Evaluate implements Visitor<Boolean> {
private final Map<Atom, Boolean> valuation;
public Evaluate(Map<Atom, Boolean> valuation) {
this.valuation = new HashMap<>(valuation);
}
@Override
public Boolean visit(Atom atom) {
Boolean result = valuation.get(atom);
if (result == null) {
throw new IllegalArgumentException(
"Missing valuation for atom [" + atom + "]."
);
}
return result;
}
@Override
public Boolean visit(Negation neg) {
Boolean subResult = neg.getExpr().accept(this);
return !subResult;
}
@Override
public Boolean visit(Conjunction con) {
Boolean leftSubResult = con.getLeftExpr().accept(this);
Boolean rightSubResult = con.getRightExpr().accept(this);
return leftSubResult && rightSubResult;
}
@Override
public Boolean visit(Disjunction dis) {
Boolean leftSubResult = dis.getLeftExpr().accept(this);
Boolean rightSubResult = dis.getRightExpr().accept(this);
return leftSubResult || rightSubResult;
}
}
</pre>
<div style="text-align: justify;">
<br />
Please note again how applying the Divide and conquer principle resulted into a very clear and concise implementation.</div>
<div style="text-align: justify;">
<br /></div>
The last piece of puzzle is the Expression interface. It looks as follows.<br />
<br />
<pre style="margin-bottom: 0px;">public interface Expression {
public <T> T accept(Visitor<T> visitor);
}
</pre>
<br />
<div style="text-align: justify;">
The important part is the accept method declaration. It is generic, which allows to use it together with a Visitor of any result type.</div>
<br />
<div style="text-align: justify;">
For the sake of completeness, let's now look at the rest of the Expression hierarchy.</div>
<br />
<pre style="margin-bottom: 0px;">public class Atom implements Expression {
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}
</pre>
<br />
<pre style="margin-bottom: 0px;">public class Negation implements Expression {
private final Expression expr;
public Negation(Expression expr) {
this.expr = expr;
}
public Expression getExpr() {
return expr;
}
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}
</pre>
<br />
<pre style="margin-bottom: 0px;">public class Disjunction implements Expression {
private final Expression leftExpr;
private final Expression rightExpr;
public Disjunction(Expression leftExpr, Expression rightExpr) {
this.leftExpr = leftExpr;
this.rightExpr = rightExpr;
}
public Expression getLeftExpr() {
return leftExpr;
}
public Expression getRightExpr() {
return rightExpr;
}
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}
</pre>
<br />
<div style="text-align: justify;">
Lastly, the following snippet shows how to put all the pieces together to evaluate a sample boolean expression.</div>
<br />
<pre style="margin-bottom: 0px;">Atom a = new Atom();
Atom b = new Atom();
Atom c = new Atom();
Expression expr = new Disjunction(
new Conjunction(
a,
new Negation(
b
)
),
c
);
Map<Atom, Boolean> valuation = new HashMap<>();
valuation.put(a, true);
valuation.put(b, true);
valuation.put(c, false);
Visitor<Boolean> evaluate = new Evaluate(valuation);
System.out.println(expr.accept(evaluate));
</pre>
<h2>
Conclusion
</h2>
<div style="margin-bottom: 0px;">
<div style="text-align: justify;">
Compared to traditionaly presented Visitor implementations, the one described in this article offers greater flexibility and allows to take advantage of the Divide and conquer principle, which is very convenient when dealing with recursive data-structures. The cost is a certain complexity increase due to the introduction of generic types.</div>
</div>
<div style="margin-bottom: 0px;">
<br /></div>
<div style="margin-bottom: 0px;">
<div style="text-align: justify;">
If you have any questions and/or comments, please don't hesitate to contact me. I'll appreciate any feedback!</div>
</div>
<div style="margin-bottom: 0px;">
<br /></div>
<div style="margin-bottom: 0px;">
<br /></div>
Dusan Rychnovskyhttp://www.blogger.com/profile/03553334499745717548noreply@blogger.com0