This document discusses object-oriented design principles and software modularity. It begins with introductions and an overview of key OO design concepts like the single responsibility principle. It then discusses the benefits of good OO design for code maintainability and reusability. The document advocates for structuring code into reusable modules and provides examples of modular architectures. It also describes coding exercises to practice designing and implementing a social media profile retrieval module using OO principles like abstraction, loose coupling, and dependency inversion.
Many occasion students are wondering which one should they choose in coding and why .In most cases, we want to avoid inheritance. We should use abstract classes only when we want to include functionality, but parts of the class's purpose need to be implemented by the child class.With abstract classes, you are forcing other developers to implement child classes using inheritance. Interfaces are much easier to add to existing classes, and with defender methods there is little reason to not consider interfaces first.
Interface in Java - Interface is a special class which can be implemented by sub-classes. So, Interface is a special class suitable for generalization of some concreted classes or abstract classes.
It's my report based on design pattern whosever want to learn how to create application using java with design patterns with less complexity they can see that
Review Session and Attending Java Interviews Hitesh-Java
In this core java training session, you will learn Java Review. Topics covered in this session are:
• How to prepare for a typical Java interview?
• Typical interview questions…
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
Many occasion students are wondering which one should they choose in coding and why .In most cases, we want to avoid inheritance. We should use abstract classes only when we want to include functionality, but parts of the class's purpose need to be implemented by the child class.With abstract classes, you are forcing other developers to implement child classes using inheritance. Interfaces are much easier to add to existing classes, and with defender methods there is little reason to not consider interfaces first.
Interface in Java - Interface is a special class which can be implemented by sub-classes. So, Interface is a special class suitable for generalization of some concreted classes or abstract classes.
It's my report based on design pattern whosever want to learn how to create application using java with design patterns with less complexity they can see that
Review Session and Attending Java Interviews Hitesh-Java
In this core java training session, you will learn Java Review. Topics covered in this session are:
• How to prepare for a typical Java interview?
• Typical interview questions…
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
YouTube Link: https://youtu.be/C_oPLDaSy-8
**Java, J2EE & SOA Certification Training - https://www.edureka.co/java-j2ee-training-course **
This Edureka PPT on "design patterns in java" will provide you with detailed knowledge about Java Design Patterns and along with it, This PPT will also cover some real-time examples of some important Design Patterns in Java, in order to provide you with a deep understanding about their functionality. This PPT will cover the following topics:
Why do we need Design Patterns?
What are Design Patterns?
Structure of a Design Pattern
Types of Design Patterns
Creational Design Pattern
Structural Design Pattern
Behavioural Design Pattern
JEE Design Pattern
Overview of design patterns
Follow us to never miss an update in the future.
YouTube: https://www.youtube.com/user/edurekaIN
Instagram: https://www.instagram.com/edureka_learning/
Facebook: https://www.facebook.com/edurekaIN/
Twitter: https://twitter.com/edurekain
LinkedIn: https://www.linkedin.com/company/edureka
Castbox: https://castbox.fm/networks/505?country=in
Java is a platform independent, case sensitive language which is used to create secure and robust applications. It was developed by James Gosling in 1991. Apart from having a C like notation, it was much easier, uniform and simple than C/C++.
Clean code is subjective and every developer has a personal take on it. There are some ideas that are considered best practice and what constitutes clean code within the industry and community, but there is no definitive distinction.
what is design pattern?
what is design pattern in java?
what are the classification of design pattern?
why design pattern is important?
how we can implement any design pattern?
example of design pattern.
Introduction to Angular for .NET DevelopersLaurent Duveau
Technical presentation given by Laurent Duveau at the Ottawa IT Community meetup on April 24, 2017.
https://www.meetup.com/ottawaitcommunity/events/238168455/
Technical presentation given by Laurent Duveau at the House of Commons in Ottawa on April 25, 2017.
Thanks to Dan Wahlin for providing the original version of the slides. I added more content to fit in a 1h talk.
Presented by: N.V.RajaSekhar Reddy
www.technolamp.co.in
Want more interesting...
Watch and Like us @ https://www.facebook.com/Technolamp.co.in
subscribe videos @ http://www.youtube.com/user/nvrajasekhar
P2Cinfotech is one of the leading, Online IT Training facilities and Job Consultant, spread all over the world. We have successfully conducted online classes on various Software Technologies that are currently in Demand. To name a few, we provide quality online training for QA, QTP, Manual Testing, HP LoadRunner, BA, Java Technologies, SEO, Web Technologies, .NET, Oracle DBA etc.
Chia sẻ về Clean Code tại XPDay Vietnam 2016.
Clean Code là gì?
Tại sao phải Clean Code?
Clean Code có khó không?
Một số ví dụ thực tế về áp dụng Clean Code.
This presentation explains two design patterns using Java source code. The design patterns used in this presentation are the factory method and abstract factory. You will be able to download java source code.
YouTube Link: https://youtu.be/C_oPLDaSy-8
**Java, J2EE & SOA Certification Training - https://www.edureka.co/java-j2ee-training-course **
This Edureka PPT on "design patterns in java" will provide you with detailed knowledge about Java Design Patterns and along with it, This PPT will also cover some real-time examples of some important Design Patterns in Java, in order to provide you with a deep understanding about their functionality. This PPT will cover the following topics:
Why do we need Design Patterns?
What are Design Patterns?
Structure of a Design Pattern
Types of Design Patterns
Creational Design Pattern
Structural Design Pattern
Behavioural Design Pattern
JEE Design Pattern
Overview of design patterns
Follow us to never miss an update in the future.
YouTube: https://www.youtube.com/user/edurekaIN
Instagram: https://www.instagram.com/edureka_learning/
Facebook: https://www.facebook.com/edurekaIN/
Twitter: https://twitter.com/edurekain
LinkedIn: https://www.linkedin.com/company/edureka
Castbox: https://castbox.fm/networks/505?country=in
Java is a platform independent, case sensitive language which is used to create secure and robust applications. It was developed by James Gosling in 1991. Apart from having a C like notation, it was much easier, uniform and simple than C/C++.
Clean code is subjective and every developer has a personal take on it. There are some ideas that are considered best practice and what constitutes clean code within the industry and community, but there is no definitive distinction.
what is design pattern?
what is design pattern in java?
what are the classification of design pattern?
why design pattern is important?
how we can implement any design pattern?
example of design pattern.
Introduction to Angular for .NET DevelopersLaurent Duveau
Technical presentation given by Laurent Duveau at the Ottawa IT Community meetup on April 24, 2017.
https://www.meetup.com/ottawaitcommunity/events/238168455/
Technical presentation given by Laurent Duveau at the House of Commons in Ottawa on April 25, 2017.
Thanks to Dan Wahlin for providing the original version of the slides. I added more content to fit in a 1h talk.
Presented by: N.V.RajaSekhar Reddy
www.technolamp.co.in
Want more interesting...
Watch and Like us @ https://www.facebook.com/Technolamp.co.in
subscribe videos @ http://www.youtube.com/user/nvrajasekhar
P2Cinfotech is one of the leading, Online IT Training facilities and Job Consultant, spread all over the world. We have successfully conducted online classes on various Software Technologies that are currently in Demand. To name a few, we provide quality online training for QA, QTP, Manual Testing, HP LoadRunner, BA, Java Technologies, SEO, Web Technologies, .NET, Oracle DBA etc.
Chia sẻ về Clean Code tại XPDay Vietnam 2016.
Clean Code là gì?
Tại sao phải Clean Code?
Clean Code có khó không?
Một số ví dụ thực tế về áp dụng Clean Code.
This presentation explains two design patterns using Java source code. The design patterns used in this presentation are the factory method and abstract factory. You will be able to download java source code.
Create first android app with MVVM Architecturekhushbu thakker
This pdf is about how to create the first application in the android
-How to do clean code
-What is the MVVM Architecture design pattern and why required architecture in app.
The presentation helps to get started with Angular by explaining: - What is Typescript?
- What is Angular?
- Create Application
- Project Structure
- Building Blocks
- Modules
- Components
- Templates
- Directives
- Routing
The project code is available here: https://github.com/MukundSonaiya/angular-sessions
Tests immutable when refactoring - SegFault Unconference Cracow 2019Grzegorz Miejski
Some time ago, when refactoring code or adding business logic, my tests failed -> leaving me unsure if I did break something or not.
How to write tests, where you can completely change the implementation and verify that it still works without breaking any test? Feels like a utopia? Come and see how to do this with "real" project example!
Github project:
https://github.com/gmiejski/dvd-rental-tdd-example
Slides for application prototyping workshop on web and mobile application design.
We discussed
- product and project requirements definition
- rationale for wireframes, mockups, prototypes
- functional prototypes vs production sw
- tools: Balsamiq, myBalsamiq, Webflow
- MVP (minimum viable product) implementation in Javascript, HTML/CSS on node.js
Object-Oriented Programming (OOP) is a fundamental paradigm in software development that allows for modular, reusable, and efficient code. Whether you’re preparing for an interview or seeking to enhance your programming skills, understanding OOP is crucial. In this comprehensive guide, we’ll explore the essential topics and concepts of OOP, equipping you with the knowledge to write clean and maintainable code.
In this series on Object-Oriented Programming (OOP), we have curated a comprehensive set of slides that cover each topic in detail. These slides not only provide a clear explanation of the concepts but also contain the latest and tricky interview questions related to each topic. They serve as a valuable resource to help you prepare for interviews and strengthen your understanding of OOP.
Preparing for an interview? These slides will not only equip you with the knowledge required but also familiarize you with the interview questions that frequently arise in OOP discussions. By practicing these questions, you’ll gain confidence and be well-prepared to showcase your OOP expertise during interviews.
Unlock the power of OOP by exploring these slides, which encompass both the fundamentals and advanced concepts. Whether you’re a beginner or an experienced developer, this series is designed to enhance your OOP skills and make you a more proficient programmer
Procedural Vs Object Oriented Programming
Procedural Programming
Can be defined as a programming model which is derived from structured programming,
based upon the concept of calling procedure. In these models, a programmer uses procedures
or functions to perform a task.
Languages used in Procedural Programming: C , Pascal , Fortan etc.
Object Oriented Programming can be defined as a programming model which is based
upon the concept of objects. Objects contain data in the form of attributes and code in the
form of methods. OOP concept uses variables and methods as procedural programs do, but it
focuses on the objects that contain variables and methods
Languages used in Object Oriented Programming:
Java, C++, C#, Python , Ruby
09/08/2022 3
Object-Oriented Programming (OOP)
Object Oriented programming (OOP) is a programming paradigm that relies on the
concept of classes and objects. It is used to structure a software program into simple,
reusable pieces of code blueprints (usually called classes), which are used to create individual
instances of objects.
It is a programming paradigm that structures a software program according to objects.
Simply put, it creates objects that contain functions and data. This paradigm relies
greatly on the concept of classes and objects.
The main aim of OOP is to bind together the data and the functions that operate on them so
that no other part of the code can access this data except that function.
09/08/2022 4
Object And Class
Class:A class is basically user-defined data types that act as a
template for creating objects of the identical type. It represents
the common properties and actions (functions) of an object.
Object: A real-world entity that has state and behavior. Here,
state represents properties and behavior represents actions and
functionality. For example, a person, chair, pen, table, etc
Object takes space in the memory but
class does not take any space in the
memory. Class does not exist physically
but an object exists physically.
09/08/2022 5
OOP Principles
Encapsulation: the attributes of an entity are enclosed in itself. In other words, encapsulation
is when an object (inside a class) keeps its state private and only exposes the selected
information.This principle requires the ability to define some fields as either private or public.
Abstraction: hide important information in order to reduce complexity. It is when the user
only interacts with specific object’s methods and/or attributes. By hiding complex details from
the user, abstraction consequently reduces complexity.
09/08/2022 6
OOP Principles
Inheritance: as the name indicates, an entity can inherit attributes from other entities. More
precisely, parent classes can extend their attributes and behaviors to child classes, which also
means that this principle supports reusability.
Polymorphism: entities can have more than one form. Hence the ‘poly’. In sum,
polymorphism is when objects are designed to share behaviors. By overriding
One of the main hindrances to teams being able to respond rapidly to new features are technical problems resulting from bad coding practices, also known as technical debt. Melissa and Brett will cover Agile tools and practices that help development teams write better code and increase maintainability. Topics that will be covered include:
Pair programming
Automated Unit Testing
Refactoring
Test-Driven Development
Agile Architecture
it describes the main concepts of object oriented programming
For more posts : http://comsciguide.blogspot.com/
For full playlist of Interview puzzles videos : https://www.youtube.com/playlist?list=PL3v9ipJOEEPfI4zt4ExamGJwndkvg0SFc
24 standard interview puzzles: https://www.youtube.com/playlist?list=PL3v9ipJOEEPefIF4nscYOobim1iRBJTjw
Aptitude training playlist link : https://www.youtube.com/playlist?list=PL3v9ipJOEEPfumKHa02HWjCfPvGQiPZiG
for C and C++ questions, that are asked in the interviews, go through the posts in the link : http://comsciguide.blogspot.com/
for more videos, my youtube channel : https://www.youtube.com/channel/UCvMy2V7gYW7VR2WgyvLj3-A
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
2. About Me
● Bryan Warner - Engineer @ Traackr
● 10 years of programming experience
● Currently working with Java/Spring/MongoDB, ElasticSearch/Lucene, and
Scala/Spray.io
● Email: bwarner@traackr.com
3. About You
● Programming experience outside of B.S.S.
● What are you hoping to learn in this session
● Ruby vs. Java
5. What is OO Design*
● Single Responsibility Principle
● Open / Closed Principle
● Data encapsulation
○ The mighty DOT (.)
● Data Abstraction / Loose Coupling
● Modularization => Architectural OO
* Impossible to follow 100%
6. Why OO Design
● Better code maintainability
● Promote code reusability (DRY)
● Less feeling like this...
7. When to OO Design
● Is it worth it? ... depends
● Cost of good design vs. cost of quick-and-dirty
design
● Too much design (i.e. over-architecting) just as
bad as no design
● What are you building?
● The future is uncertain
8. Bird's Eye View
To begin,
Let's ask the question: Where does Code live?
Hint: It's not the cloud...
10. MVC - 1 Year Later
RAILS APP
MODULE
CONTROLLER CONTROLLER
CONTROLLER CONTROLLER
MODEL MODEL
EMAIL UTILS
MODEL
MODEL MODEL MODEL
11. MVC - 2 Years Later
RAILS APP
MODULE
CONTROLLER
MODEL
MODEL MODEL
MODEL MODEL
MODEL
EMAIL UTILS
ANALYTICS
UTILS
REPORTING
UTILS
MODEL
MODEL
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
CONTROLLER
MODEL
MODEL
MODEL MODEL MODEL MODEL
CRON JOB
UTILS
EMAIL UTILS
WEB UTILS
12. Bloat
● Classes => Single Responsibility Principle
○ Failure to adhere = Non-reusable code
● Applications => Single Purpose Principle
○ Failure to adhere = One monolithic application
13. Who Cares, right?
● Tougher to scale performance with one, giant application
● As the application grows, tougher to add features to it
○ No matter how well you structure your code, it's just increasingly
difficult to keep the bloat under control without modularization
● Unit testing performance suffers => Less likely to add more tests (or even
run the ones you have!)
● So what's the answer?
15. What is a module?
● A grouping of classes that share a common purpose
● A module should have a specification file that describes the module
○ Name, summary, etc.
○ Version number
○ External dependencies (if any)
● Ruby: Gemspec File (http://docs.rubygems.org/read/chapter/20)
○ http://rubygems.org/gems/twitter
● Java: Maven => POM File
○ http://search.maven.org/#browse%7C-120342089
● Provides its own set of unit tests (hopefully!)
● A module can (and usually does) extend the functionality of another
module
16. Modules ~ Legos
Modules are the building blocks of your applications!
18. Modules <-> OO Design
● Efficient software modularization can't be achieved without following good
OO design principles
● The functionality a module offers is only available through the classes it
provides. Think about:
○ What methods (i.e. APIs) do you want to expose in your classes?
○ How could one extend the functionality you provide (e.g. inheritance
structures, interfaces, mixins, etc.)
● A module's classes should only do what they are designed to do (SRP)
○ Classes that make behavioral assumptions are less reusable by
others
● Classes bloat = Module bloat
19. Coding Exercise I
● Let's create a software module!
● Identify a reusable software component that can be leveraged in your own
personal projects
○ Can we brainstorm ideas in class and break into teams?
○ -OR-
○ Program against the use-case in the next slide
● Properly structure your module according to Ruby Gem standards
○ For instance, I can demonstrate how Java Maven modules are
structured
● Unit tests for your module!
● Extra Credit => Create a Ruby Gem for your module
20. Module Description
1. Exposes one method to take in a social profile URL and return a social
profile response
2. The supported URLs will be facebook and twitter. Non-supported URLs
should throw an exception
3. Use a ruby HTML parser to scrap the data from the page and extract the
person's bio, picture URL, etc.
4. Create a class to encapsulate the response info
21. Coding Exercise II
● Import our social profile retrieval module into an existing Rails App or we
can create a new one
● Let's add some properties to a Contact model
○ Social Profile URL
○ Bio
○ Image URL
○ Etc.
● When we create a Contact
○ Hook into our module to automatically fetch a contact's social profile
info
○ Store this information on the contact
22. Data Abstraction
● Loosely-coupled vs. highly-coupled classes
● Dependency inversion
○ High-level components should not depend directly on low-level
components. They should both depend on abstractions
○ Abstractions should not depend on details. Details should depend
upon abstractions
● Hides implementation details from caller
● Allows us to switch out low-level components on the fly
○ Which is terrific for unit testing,
○ Allows us to utilize a concept known as mock objects
23. Data Abstraction
● Java => Interfaces
○ Interface methods can not provide any implementation details
● Scala => Traits
○ Similar to interfaces, but a trait method can provide a default
implementation
● Ruby => "duck-typing" ... no such thing as a "design by contract" due to the
lack of static typing
Dependency injection frameworks can help "wire" classes together that utilize
an abstraction layer
○ Java => Spring Framework, Google Guice
24. Coding Exercise III
● Let's re-examine our social profile retrieval module
○ Let's create an inheritance structure for our retrieval component so it
can support multiple, different implementations
○ Have our existing class extend this inheritance structure and re-name
the class to reflect what type of implementation it is (e.g.
SocialProfilePageScrapper)
○ Create a new implementation for social profile retrieval that will mock
(i.e. fake) a response instead of actually making an HTTP call, and
name it appropriately
25. Coding Exercise IV
● Let's apply the principles of data inversion to our application's dependency
on the module
○ In our Ruby on Rails app, where we create the contact, abstract the
usage of the social profile retrieval component so it can be easily be
"switched out" for different implementations
■ Hint: the component should be a property of the class it lives in
○ Extra Credit: Write a unit test for creating a contact that will "wire in"
the mock social profile implementation so we can assert for known
expected values