TweetFollow Us on Twitter

January 92 - Postcard from Windows Land - Is Windows object-oriented?

Postcard from Windows Land - Is Windows object-oriented?

James Plamondon

When the Microsoft gang started writing Windows back in the mid-eighties, they were all excited about object programming. They, like Apple, toured Xerox PARC and saw what Xerox was doing with bit-mapped displays, windows, mice, and so on. Microsoft, like Apple, thought this stuff was going to be the wave of the future-so they went home and started working on a cool object-oriented operating system.

Then reality hit. Their target platform, the standard IBM PC of their day, was totally unable to handle the strain of a truly object-oriented system. So, like Apple, Microsoft compromised, and wrote a procedural operating system with an object-oriented flavor.

For whatever reason, however, Windows was unsuccessful throughout its development-until around the time Microsoft's OS/2 deal with IBM fell through-whereas the Mac OS was the star at Apple from soon after its inception. So the Windows operating system is only now beginning to flower, as the Mac OS did about four years ago.

What's amazing to me is how fast Windows is moving. Whereas Apple took ages to bring out System 7, Microsoft is bringing out Windows 3.1 just 18 months (roughly) after 3.0 hit the shelves. And Windows 3.1 should really be called Windows 4; it is a really big improvement over Windows 3.0 (which has sold over five million copies in the last year, so it's no slouch, either).

But is Windows object-oriented? Absolutely not-if, by "object-oriented," you mean written in an object programming language. Given Windows' origins and history, it couldn't be. Smalltalk and Simula were the only decent object programming languages available at the product's inception, and neither would give adequate performance on their target system. So Microsoft did the best it could under the restraints it was under at the time. And in at least one way, Microsoft did a better job than Apple.

Windows, true to its name, has a real windowing system; the Mac does not. This should come as no surprise to MacApp programmers; one of the most important benefits MacApp provides to Mac programmers is-you guessed it-a windowing system, in the form of MacApp views. [A Windows "window" is equivalent to a MacApp "view;" a MacApp "window" is equivalent to a Windows "frame window."] It is considerably easier to write an application framework for Windows than for the Mac, because a Windows framework could use the native windowing system. Zillions of lines of code could be saved.

On the Mac, when you create a window, you get a pointer to a data structure. This data structure is completely dumb. There's no way to call its methods or send it messages. In Windows, on the other hand, one can define a window class, and associate with this class a number of attributes and-importantly-a window procedure (WinProc). When you create a window, you must specify the class of the window. The window reference you get back is a unique window identifier, but it's completely "blind." You can't use it as a pointer to get at its data directly. Instead, you have to "send the window a message" to act on it.

"Sending the window a message" works just like "sending a message" to a Mac CDEF, WDEF, or other code resource. You call a procedure with an integer argument that indicates which message you're sending, and a couple of other arguments that can hold additional data. (Before you snort in disdain at the notion of using integral message discriminators, think about MacApp's use of command numbers in TEvtHandler.DoMenuCommand().)

So, Windows does a better job of data abstraction and encapsulation, at least with regard to window data structures. But is this abstraction and encapsulation enough to make it object-oriented?

Well, maybe not-but there's more. Having defined a window class, one can "subclass" the window class. Now, before you get all excited, let me admit that it's not "real" subclassing, using the definition used by object programming languages. But it's not a bad simulation.

Let's say you want to write a variation of the standard Windows "edit" control-to validate its entries as dates, perhaps. You would need to get a copy of the "edit" class' class info (by calling GetClassInfo()), and modify the resulting copy to use your new class name ("edit_date"). Also, you would save off the class info's pointer to the "edit" class' WinProc, and store the "edit_date" class' WinProc pointer in its place (in the copy). Then, you would call RegisterClass() to tell Windows that the window class existed.

Having done this, you can then create a window of class "edit_date" by telling Windows to do so. It will respond by handing you back a unique window identifier. From then on, both Windows and your application will interact with the window by sending it messages. Messages are sent to the window by calling the Windows function SendMessage() with the window ID as the first argument, or by calling other Windows functions that eventually call SendMessage().

SendMessage()'s prototype is roughly as follows:

long SendMessage(HWND hWnd, short wMsg, short wParam, long lParam);

[This prototype has been simplified for ease of understanding by the MacApp audience. The correct prototype is "LONG FAR PASCAL MyWinProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)."]

"hWnd" is the unique window ID. When SendMessage() is called on a given window, the window's WinProc is called. The WinProc's prototype is almost the same as that of SendMessage(); calling SendMessage() can be viewed as a polymorphic call to a window's message procedure.

The WinProc typically contains a huge switch statement (in Pascal, case statement) that forwards the message to the appropriate message handler (much like TApplication.DispatchEvent()). And, since you carefully saved off the standard Windows "edit" window class' WinProc pointer before calling RegisterClass(), you can call it from within your "edit_date" window class' WinProc-much like calling the inherited implementation of a method in an OOP language. It ain't pretty, but it works.

So, maybe Windows is object-oriented, and maybe it's not. Maybe, as a friend of mine said recently, object-orientation is not a binary, yes-or-no quality, but rather a continuum. If so, then Windows is certainly "more object-oriented" than the Mac OS, while being "less object-oriented" than MacApp.

The answer to the question may be irrelevant. It is relevant, though, that your MacApp experience will put you way ahead of the game in Windows programming. MacApp software development tools are on the cutting edge, while those for Windows are still blunt instruments, suitable only for beating code into submission.

But the bottom line remains the same: Windows is selling at an incredible rate, and will be a significant force in the microcomputer industry for years to come. By learning to program in Windows, you will be assuring your financial security for at least the next decade.

As the old saying goes, in the land of the blind, the one-eyed man is King; and with Windows selling at an incredible rate, the Land of the Blind is expanding rapidly. We MacAppers know how to wring the most out of an even vaguely-object-oriented system; you can see the opportunity this presents to us, even with one eye shut.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple iTunes 12.6.2 - Play Apple Music a...
Apple iTunes lets you organize and stream Apple Music, download and watch video and listen to Podcasts. It can automatically download new music, app, and book purchases across all your devices and... Read more
Transmit 5.0 - Excellent FTP/SFTP client...
Transmit is an excellent FTP (file transfer protocol), SFTP, S3 (Amazon.com file hosting) and iDisk/WebDAV client that allows you to upload, download, and delete files over the internet. With the... Read more
Adobe Lightroom 6.12 - Import, develop,...
Adobe Lightroom is available as part of Adobe Creative Cloud for as little as $9.99/month bundled with Photoshop CC as part of the photography package. Lightroom 6 is also available for purchase as a... Read more
Google Earth 7.3.0.3830 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth combines... Read more
Cocktail 10.4.1 - General maintenance an...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
iMazing 2.3.2 - Complete iOS device mana...
iMazing (was DiskAid) is the ultimate iOS device manager with capabilities far beyond what iTunes offers. With iMazing and your iOS device (iPhone, iPad, or iPod), you can: Copy music to and from... Read more
Backup and Sync 3.35.5978.2967 - File ba...
Backup and Sync (was Google Drive) is a place where you can create, share, collaborate, and keep all of your stuff. Whether you're working with a friend on a joint research project, planning a... Read more
Google Earth 7.3.0.3830 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth combines... Read more
Transmit 5.0 - Excellent FTP/SFTP client...
Transmit is an excellent FTP (file transfer protocol), SFTP, S3 (Amazon.com file hosting) and iDisk/WebDAV client that allows you to upload, download, and delete files over the internet. With the... Read more
iMazing 2.3.2 - Complete iOS device mana...
iMazing (was DiskAid) is the ultimate iOS device manager with capabilities far beyond what iTunes offers. With iMazing and your iOS device (iPhone, iPad, or iPod), you can: Copy music to and from... Read more

Latest Forum Discussions

See All

The best deals on the App Store this wee...
There are quite a few truly superb games on sale on the App Store this week. If you haven't played some of these, many of which are true classics, now's the time to jump on the bandwagon. Here are the deals you need to know about. [Read more] | Read more »
Realpolitiks Mobile (Games)
Realpolitiks Mobile 1.0 Device: iOS Universal Category: Games Price: $5.99, Version: 1.0 (iTunes) Description: PLEASE NOTE: The game might not work properly on discontinued 1GB of RAM devices (iPhone 5s, iPhone 6, iPhone 6 Plus, iPad... | Read more »
Layton’s Mystery Journey (Games)
Layton’s Mystery Journey 1.0.0 Device: iOS Universal Category: Games Price: $15.99, Version: 1.0.0 (iTunes) Description: THE MUCH-LOVED LAYTON SERIES IS BACK WITH A 10TH ANNIVERSARY INSTALLMENT! Developed by LEVEL-5, LAYTON’S... | Read more »
Full Throttle Remastered (Games)
Full Throttle Remastered 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Originally released by LucasArts in 1995, Full Throttle is a classic graphic adventure game from industry legend Tim... | Read more »
Stunning shooter Morphite gets a new tra...
Morphite is officially landing on iOS in September. The game looks like the space shooter we've been needing on mobile, and we're going to see if it fits the bill quite shortly. The game's a collaborative effort between Blowfish Studios, We're Five... | Read more »
Layton's Mystery Journey arrives to...
As you might recall, Layton's Mystery Journey is headed to iOS and Android -- tomorrow! To celebrate the impending launch, Level-5's released a new trailer, complete with an adorable hamster. [Read more] | Read more »
Sidewords (Games)
Sidewords 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Grab a cup of coffee and relax with Sidewords. Sidewords is part logic puzzle, part word game, all original. No timers. No... | Read more »
Noodlecake Games' 'Leap On!...
Noodlecake Games is always good for some light-hearted arcade fun, and its latest project, Leap On! could carry on that tradition. It's a bit like high stakes tetherball in a way. Your job is to guide a cute little blob around a series of floating... | Read more »
RuneScape goes mobile later this year
Yes, RuneScape still exists. In fact, it's coming to iOS and Android in just a few short months. Jagex, creators of the hit fantasy MMORPG of yesteryear, is releasing RuneScape Mobile and Old School RuneScape for mobile devices, complete with... | Read more »
Crash of Cars wants you to capture the c...
Crash of Cars is going full on medieval in its latest update, introducing castles and all manner of new cars and skins fresh from the Dark Ages. The update introduces a new castle-themed map (complete with catapults) and a gladiator-style battle... | Read more »

Price Scanner via MacPrices.net

DEVONthink To Go 2.1.7 For iOS Brings Usabili...
DEVONtechnologies has updated DEVONthink To Go, the iOS companion to DEVONthink for Mac, with enhancements and bug fixes. Version 2.1.7 adds an option to clear the Global Inbox and makes the grid... Read more
15-inch 2.2GHz Retina MacBook Pro, Apple refu...
Apple has Certified Refurbished 2015 15″ 2.2GHz Retina MacBook Pros available for $1699. That’s $300 off MSRP, and it’s the lowest price available for a 15″ MacBook Pro. An Apple one-year warranty is... Read more
13-inch 2.3GHz Silver MacBook Pro on sale for...
B&H Photo has the new 2017 13″ 2.3GHz/256GB Silver MacBook Pro (MPXU2LL/A) on sale for $1399 including free shipping plus NY & NJ sales tax only. Their price is $100 off MSRP. Read more
Apple Tackles Distracted Driving With iOS 11...
One of the most important new features coming in iOS 11 is Do Not Disturb while driving, intended to help drivers stay more focused on the road. With Do Not Disturb while driving, your iPhone can... Read more
iMazing Mini for Mac: Free Automatic and Priv...
Geneva, Switzerland-based indie developer DigiDNA has released iMazing Mini, their free macOS utility designed to automatically back up iOS devices over any local Wi-Fi network. The app offers users... Read more
Clearance 2016 13-inch MacBook Airs, Apple re...
Apple dropped prices recently on Certified Refurbished 2016 13″ MacBook Airs, with models now available starting at $809. An Apple one-year warranty is included with each MacBook, and shipping is... Read more
9.7-inch 2017 iPads available for $299, save...
B&H Photo has 2017 9.7″ 32GB WiFi iPads on sale for $30 off MSRP for a limited time. Shipping is free, and pay sales tax in NY & NJ only: – 32GB iPad WiFi: $299, $30 off Read more
Welcome to the new MacPrices.net!
Welcome to the newly redesigned MacPrices.net! MacPrices has been comprehensively redesigned from the ground up over the past couple of weeks. The new design is cleaner, with less clutter, minimal... Read more
Clearance iMacs available for up to $370 off...
B&H Photo has clearance 21″ and 27″ Apple iMacs available for up to $370 off original MSRP, each including free shipping plus NY & NJ sales tax only: – 27″ 3.3GHz iMac 5K: $1929 $370 off... Read more
Sale! 15-inch 2.8GHz MacBook Pros for $100 of...
B&H Photo has the new 2017 15″ 2.8GHz Touch Bar MacBook Pros on sale for $100 off MSRP. Shipping is free, and B&H charges sales tax in NY & NJ only: – 15″ 2.8GHz MacBook Pro Space Gray: $... Read more

Jobs Board

Search, Recommendation & Personalization...
Job Summary Apple is seeking a product manager for Search, Recommendation and Personalization for our media products. This includes Apple Music, Podcasts, iBooks Read more
Frameworks Engineering Manager, *Apple* Wat...
Frameworks Engineering Manager, Apple Watch Job Number: 41632321 Santa Clara Valley, California, United States Posted: Jun. 15, 2017 Weekly Hours: 40.00 Job Summary Read more
*Apple* Customer Experience (ACE) Leader - A...
…management to deliver on business objectivesTraining partner store staff on Apple products, services, and merchandising guidelinesCoaching partner store staff on Read more
Frameworks Engineering Manager, *Apple* Wat...
Frameworks Engineering Manager, Apple Watch Job Number: 41632321 Santa Clara Valley, California, United States Posted: Jun. 15, 2017 Weekly Hours: 40.00 Job Summary Read more
*Apple* Solutions Consultant - Apple Inc. (U...
…about helping others on a team while also delighting customers? As an Apple Solutions Consultant (ASC), you will discover customers needs and help connect them Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.